Ecco come lo farei:
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
La modalità "noexec" mette SSMS in uno stato in cui compila semplicemente il T-SQL e non lo esegue effettivamente. È simile a premere accidentalmente il pulsante Analizza della barra degli strumenti (Ctrl+F5) invece di Esegui (F5).
Non dimenticare di disattivare noexec alla fine dello script. In caso contrario, gli utenti verranno confusi da "Comandi completati correttamente". messaggi.
Uso il controllo contro @@error nel batch successivo invece di usare i blocchi TRY CATCH. L'utilizzo di @@error nel batch successivo rileverà gli errori di compilazione, come "la tabella non esiste".
Oltre alla modalità noexec, attivo anche la modalità nocount. Con la modalità noexec attivata e nocount disattivata, le tue query riporteranno comunque un messaggio "(0 righe interessate)". Il messaggio riporta sempre zero righe, perché sei in modalità noexec. Tuttavia, l'attivazione di nocount sopprime questi messaggi.
Si noti inoltre che se si esegue SQL Server 2005, il comando che si sta ignorando potrebbe comunque visualizzare messaggi di errore se fa riferimento a una tabella che non esiste e il comando se è il primo comando nel batch. Forzare il comando come secondo comando nel batch con un'istruzione Print falsa può sopprimere questo. Vedere MS Bug #569263 per maggiori dettagli.