Вот как я это сделаю:
PRINT 'This runs'
go
SELECT 0/0, 'This causes an error'
go
if (@@error <> 0)
Begin
set nocount on
set noexec on
End
GO
PRINT 'This should not run'
go
set noexec off
set nocount off
GO
Режим "noexec" переводит SSMS в состояние, в котором он просто компилирует T-SQL и фактически не выполняет его. Это похоже на случайное нажатие кнопки панели инструментов Parse (Ctrl + F5) вместо Execute (F5).
Не забудьте снова выключить noexec в конце вашего скрипта. В противном случае пользователи будут сбиты с толку постоянным «Команда (и) успешно выполнена». сообщения.
Я использую проверку на @@ error в следующем пакете вместо использования блоков TRY CATCH. При использовании @@ error в следующем пакете будут обнаружены ошибки компиляции, например, «таблица не существует».
В дополнение к режиму noexec я также переключаю режим nocount. При включенном режиме noexec и отключенном nocount ваши запросы будут по-прежнему сообщать о сообщении "(затронуто 0 строк)". В сообщении всегда указывается ноль строк, потому что вы находитесь в режиме noexec. Однако включение nocount подавляет эти сообщения.
Также обратите внимание, что при запуске SQL Server 2005 пропускаемая команда может по-прежнему выдавать сообщения об ошибках, если она ссылается на несуществующую таблицу, и команду в качестве первой команды в пакете. Использование этой команды в качестве второй команды в пакете с фиктивным оператором Print может подавить это. Подробнее см. MS Bug # 569263 .