SQL Tabelle ändert dann Werte ändern
-
18-09-2019 - |
Frage
Ich habe einen SQL-Skript, das ich arbeite und ich laufe in ein Problem, wenn ich (oder Bearbeitung) eine Spalte bin zu schaffen und dann diese neuen Spalt zu ändern versuchen.
Zum Beispiel:
BEGIN
ALTER TABLE SampleTable ADD ColumnThree int
END
IF (EXISTS (SELECT * FROM sys.columns WHERE name = 'ColumnThree'))
BEGIN
UPDATE SampleTable SET ColumnThree = 0
END
Nun dachte ich, die BEGIN / END-Blöcke würden heraus diese beiden Elemente trennen, aber ich erhalte eine Fehlermeldung „Ungültige Spaltenname‚ColumnThree‘.“ wenn ich versuche, dies auszuführen. Warum? Sollte nicht die erste BEGIN / END eingerichtet, dass ColumnThree und mehr auf den Punkt die IF (VORHANDEN sollte die UPDATE-Anweisung schützt ausgeführt werden, wenn der Spaltenname existiert nicht.
Was ist der richtige Weg, so etwas zu tun? (Ich scheine ein paar ähnliche Szenarien zu haben, wo dies erforderlich ist).
Lösung
Sie müssen GO
, nicht BEGIN/END
. Auch Sie möchten Ihre EXISTS
Abfrage ein wenig bearbeiten, um sicherzustellen, dass Sie immer die richtige Tabelle:
ALTER TABLE SampleTable ADD ColumnThree int
GO
IF (EXISTS
(SELECT 1
FROM
sys.columns c
INNER JOIN sys.tables t ON
c.object_id = t.object_id
WHERE
t.name = 'SampleTable'
AND c.name = 'ColumnThree'))
BEGIN
UPDATE SampleTable SET ColumnThree = 0
END
Wenn Sie mehrere Schemas verwenden, werden Sie sys.schemas
in die Kontrolle, als auch zu erreichen.