Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

SQL Server:Como abortar uma série de lotes no Query Analyzer?


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.