У меня есть следующий код:
-- start of code
set noexec off
declare @requiredVersion int
declare @currentVersion int
set @requiredVersion = 5
set @currentVersion = 4
if (@currentVersion < @requiredVersion)
begin
print 'Please update your DB to version 5 before running this script.'
set noexec on
end
go
-- print 'Dummy'
insert into tblFooBar(name) values ('AAA')
go
set noexec off
-- end of code
Обратите внимание, что таблица "tblfoobar" не существует в базе данных. Когда я запускаю этот код, появляется сообщение:
Please update your DB to version 5 before running this script.
Msg 208, Level 16, State 1, Line 1
Invalid object name 'tblFooBar'.
Я ожидал, что установка noexec в положение ON может не дать часть сообщения "Msg 208".
Затем снова «set noexec on» компилирует код, а не выполняет его. Попытка вставить что-то в таблицу, которая не существует, является ошибкой времени компиляции - я предполагаю. Если это так, то должно появиться сообщение об ошибке «отсутствующий объект».
Теперь позвольте мне рассказать вам о странном поведении, которое я наблюдал. Если я уберу комментарий из строки "- Вывести 'dummy'"
-- start of code
set noexec off
declare @requiredVersion int
declare @currentVersion int
set @requiredVersion = 5
set @currentVersion = 4
if (@currentVersion < @requiredVersion)
begin
print 'Please update your DB to version 5 before running this script.'
set noexec on
end
go
print 'Dummy'
insert into tblFooBar(name) values ('AAA')
go
и выполнить код, я получаю только следующее сообщение.
Пожалуйста, обновите вашу БД до версии 5. Перед запуском этого скрипта.
На этот раз нет сообщения об отсутствующей таблице.
Может кто-нибудь объяснить мне это поведение? Спасибо.