2015-09-24 7 views
5

Ich habe ein großes SQL-Skript mit vielen Batches (mit GO).Ausführung von SQL-Skript stoppen

Unter bestimmten Bedingungen möchte ich die gesamte Ausführung dieses Skripts stoppen.

Ich versuchte mit NOEXEC, aber ich bekomme weiterhin ungültige Objektfehler, da mein Skript das Erstellen und Hinzufügen von Daten zu neuen Tabellen und Spalten enthält.

Ich möchte nicht RAISERROR verwenden, gibt es eine andere Möglichkeit, dies zu tun?

+0

Ich kenne keine Möglichkeit, dies zu tun. Sind die GO-Anweisungen notwendig? Ich würde versuchen, es entweder zu einem einzigen Stapel zu machen und daraus auszubrechen oder einen Weg zu finden, diese Stapelindividuen auszuführen (z. B. Powershell oder eine andere Skriptsprache, SSIS, sie in gespeicherte Prozeduren zu bringen usw.). – Goody

+0

Wie führen Sie dieses Skript aus? Verwaltungsstudio? SQLCMD? Anwendung? –

+0

Ich führe es in Management Studio –

Antwort

4

Es gibt keine guten Lösungen für dieses Problem. Eine Möglichkeit, Daten zwischen Batches zu teilen, sind Tabellen (persistent oder temporär). So können Sie eine gewisse Logik haben, die auf einem gewissen Zustand der Tabelle oder den Wert von bestimmten Spalten in dieser Tabelle wie folgt ab:

--CREATE TABLE debug(col int) 
--INSERT INTO debug VALUES(1) 
--DELETE FROM debug 


SELECT 1 
GO 

SELECT 2 

SELECT 3 

GO 

IF EXISTS(SELECT * FROM debug) 
    SELECT 6 

GO 

Gerade IF EXISTS(SELECT * FROM debug) fügen Sie diese Zeile zu jedem Ort in Skript, das Sie überspringen wollen und je nach die Tatsache, dass die Tabelle einige Zeilen oder nicht diese Codeblöcke hat, wird ausgeführt oder nicht.

+0

Scheint wie eine gute Lösung, aber es wird keinen Sinn in meiner Situation, da ich ein riesiges Skript habe und es nicht ratsam ist, vor jedem Batch Scheck hinzufügen. –

+3

@RandomUser, Sie haben nur keine Alternative. –

Verwandte Themen