Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

SQL Server:Wie kann man eine Reihe von Batches in Query Analyzer abbrechen?

So würde ich es machen:

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

Der „noexec“-Modus versetzt SSMS in einen Zustand, in dem T-SQL nur kompiliert und nicht tatsächlich ausgeführt wird. Dies ähnelt dem versehentlichen Drücken der Symbolleistenschaltfläche „Parsen“ (Strg+F5) anstelle von „Ausführen“ (F5).

Vergessen Sie nicht, noexec am Ende Ihres Skripts wieder auszuschalten. Andernfalls werden Benutzer durch permanentes "Befehl(e) erfolgreich ausgeführt" verwirrt. Nachrichten.

Ich verwende die Prüfung gegen @@error im nachfolgenden Stapel, anstatt TRY CATCH-Blöcke zu verwenden. Die Verwendung von @@error im nächsten Stapel fängt Kompilierungsfehler ab, wie "Tabelle existiert nicht".

Zusätzlich zum noexec-Modus schalte ich auch den nocount-Modus um. Wenn der noexec-Modus aktiviert und nocount deaktiviert ist, melden Ihre Abfragen weiterhin die Meldung „(0 Zeilen(s) betroffen)“. Die Nachricht meldet immer null Zeilen, weil Sie sich im noexec-Modus befinden. Wenn Sie nocount aktivieren, werden diese Meldungen jedoch unterdrückt.

Beachten Sie auch, dass beim Ausführen von SQL Server 2005 der übersprungene Befehl möglicherweise weiterhin Fehlermeldungen ausgibt, wenn er auf eine nicht vorhandene Tabelle verweist, und dass der Befehl der erste Befehl im Stapel ist. Das Erzwingen, dass der Befehl der zweite Befehl im Batch mit einer falschen Print-Anweisung ist, kann dies unterdrücken. Siehe MS-Fehler Nr. 569263 für weitere Details.