Sådan gør jeg det:
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"-tilstanden gør, at SSMS er en tilstand, hvor den blot kompilerer T-SQL'en og faktisk ikke udfører den. Det svarer til ved et uheld at trykke på knappen Parse værktøjslinje (Ctrl+F5) i stedet for Execute (F5).
Glem ikke at slå noexec fra igen i slutningen af dit script. Ellers vil brugerne blive forvirrede af permanent "Kommando(r) fuldført med succes." beskeder.
Jeg bruger checken mod @@error i den efterfølgende batch i stedet for at bruge TRY CATCH-blokke. Brug af @@error i den næste batch vil fange kompileringsfejl, såsom "tabel eksisterer ikke".
Ud over noexec-tilstanden skifter jeg også nocount-tilstanden. Med noexec-tilstand slået til og nocount slået fra, vil dine forespørgsler stadig rapportere en besked "(0 række(r) påvirket)". Meddelelsen rapporterer altid nul rækker, fordi du er i noexec-tilstand. Men hvis du slår nocount til, undertrykkes disse beskeder.
Bemærk også, at hvis du kører SQL Server 2005, kan den kommando, du springer over, stadig give fejlmeddelelser, hvis den refererer til en tabel, der ikke eksisterer, og kommandoen, hvis den første kommando i partiet. At tvinge kommandoen til at være den anden kommando i partiet med en falsk Print-erklæring kan undertrykke dette. Se MS-fejl #569263 for flere detaljer.