Ето как бих го направил:
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 грешка #569263 за повече подробности.