368 Stimmen

SQL Server - Anhalten oder Unterbrechen der Ausführung eines SQL-Skripts

Gibt es eine Möglichkeit, die Ausführung eines SQL-Skripts in SQL Server sofort zu stoppen, z. B. mit einem "break"- oder "exit"-Befehl?

Ich habe ein Skript, das einige Überprüfungen und Nachforschungen durchführt, bevor es mit dem Einfügen beginnt, und ich möchte, dass es anhält, wenn eine der Überprüfungen oder Nachforschungen fehlschlägt.

0voto

Thomas Oatman Punkte 71

Vielen Dank an alle anderen Leute hier und andere Beiträge, die ich gelesen habe. Aber nichts hat alle meine Bedürfnisse erfüllt, bis @jaraics geantwortet hat.

In den meisten Antworten, die ich gesehen habe, werden Skripte mit mehreren Chargen nicht berücksichtigt. Und sie ignorieren die doppelte Verwendung in SSMS und SQLCMD. Mein Skript ist in SSMS vollständig ausführbar - aber ich möchte, dass F5 verhindert, dass eine bestehende Gruppe von Objekten versehentlich entfernt wird.

SET PARSEONLY ON gut genug funktioniert, um unerwünschte F5 zu verhindern. Aber dann können Sie nicht mit SQLCMD laufen.

Eine andere Sache, die mich eine Zeit lang gebremst hat, ist die Art und Weise, wie ein Batch alle weiteren Befehle überspringt, wenn ein Fehler auftritt - also meine SET NOCOUNT ON übersprungen wurde und das Skript somit weiterlief.

Wie auch immer, ich habe die Antwort von Jaraics ein wenig abgewandelt: (in diesem Fall brauche ich auch eine Datenbank, die über die Kommandozeile aktiv ist)

-----------------------------------------------------------------------
-- Prevent accidental F5
-- Options:
--     1) Highlight everything below here to run
--     2) Disable this safety guard
--     3) or use SQLCMD
-----------------------------------------------------------------------
set NOEXEC OFF                             -- Reset in case it got stuck ON
set CONTEXT_INFO  0x1                      -- A 'variable' that can pass batch boundaries
GO                                         -- important !
if $(SQLCMDDBNAME) is not null
    set CONTEXT_INFO 0x2                   -- If above line worked, we're in SQLCMD mode
GO                                         -- important !
if CONTEXT_INFO()<>0x2 
begin
    select 'F5 Pressed accidentally.'
    SET NOEXEC ON                          -- skip rest of script
END
GO                                         -- important !
-----------------------------------------------------------------------

< rest of script . . . . . >

GO
SET NOEXEC OFF
print 'DONE'

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X