Så här skulle jag göra:
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"-läget sätter att SSMS är ett tillstånd där det bara kompilerar T-SQL och faktiskt inte kör det. Det liknar att av misstag trycka på knappen Parse verktygsfältet (Ctrl+F5) istället för Execute (F5).
Glöm inte att stänga av noexec igen i slutet av ditt skript. Annars kommer användare att bli förvirrade av permanent "Kommandon(er) har slutförts framgångsrikt." meddelanden.
Jag använder kontrollen mot @@error i den efterföljande batchen istället för att använda TRY CATCH-block. Att använda @@error i nästa batch kommer att fånga kompileringsfel, som "tabell finns inte".
Förutom noexec-läget växlar jag också nocount-läget. Med noexec-läge på och nocount av, kommer dina frågor fortfarande att rapportera ett meddelande "(0 rad(er) påverkade)". Meddelandet rapporterar alltid noll rader, eftersom du är i noexec-läge. Men om du aktiverar nocount undertrycks dessa meddelanden.
Observera också att om du kör SQL Server 2005 kan kommandot du hoppar över fortfarande ge felmeddelanden om det refererar till en tabell som inte finns och kommandot om det första kommandot i partiet. Att tvinga kommandot att vara det andra kommandot i partiet med en falsk Print-sats kan undertrycka detta. Se MS Bug #569263 för mer information.