Zde je návod, jak bych to udělal:
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
Režim "noexec" uvádí, že SSMS je stav, kdy pouze zkompiluje T-SQL a ve skutečnosti jej nespustí. Je to podobné, jako když nechtěně stisknete tlačítko panelu nástrojů Parse (Ctrl+F5) místo Execute (F5).
Na konci skriptu nezapomeňte vypnout noexec. V opačném případě budou uživatelé zmateni trvalým "Příkaz(y) úspěšně dokončeny." zprávy.
Používám kontrolu proti chybě @@ v následné dávce namísto použití bloků TRY CATCH. Použití @@chyby v další dávce zachytí chyby kompilace, například "tabulka neexistuje".
Kromě režimu noexec přepínám i režim nocount. Se zapnutým režimem noexec a vypnutým nocount budou vaše dotazy stále hlásit zprávu „(0 ovlivněných řádků)“. Zpráva vždy hlásí nula řádků, protože jste v režimu noexec. Zapnutí nocount však tyto zprávy potlačí.
Všimněte si také, že při spuštění SQL Server 2005 může přeskakovaný příkaz stále zobrazovat chybové zprávy, pokud odkazuje na tabulku, která neexistuje, a příkaz, pokud je prvním příkazem v dávce. Vynucení toho, aby byl příkaz druhým příkazem v dávce pomocí falešného příkazu Print, to může potlačit. Viz Chyba MS č. 569263 pro více podrobností.