Aqui está como eu faria:
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
O modo "noexec" coloca o SSMS em um estado em que ele apenas compila o T-SQL e não o executa. É semelhante a pressionar acidentalmente o botão da barra de ferramentas Analisar (Ctrl+F5) em vez de Executar (F5).
Não se esqueça de desativar o noexec no final do seu script. Caso contrário, os usuários ficarão confusos com "Comando(s) concluído(s) com sucesso" permanente. mensagens.
Eu uso a verificação contra @@error no lote subsequente em vez de usar blocos TRY CATCH. Usar @@error no próximo lote detectará erros de compilação, como "a tabela não existe".
Além do modo noexec, também alterno o modo nocount. Com o modo noexec ativado e nocount desativado, suas consultas ainda relatarão uma mensagem "(0 linhas afetadas)". A mensagem sempre relata zero linhas, porque você está no modo noexec. No entanto, ativar nocount suprime essas mensagens.
Observe também que, se estiver executando o SQL Server 2005, o comando que você está ignorando ainda poderá fornecer mensagens de erro se fizer referência a uma tabela que não existe e o comando se for o primeiro comando do lote. Forçar o comando a ser o segundo comando no lote com uma instrução Print falsa pode suprimir isso. Consulte Erro MS #569263 para mais detalhes.