Ich generiere ein Skript für die automatische Migration von Änderungen aus mehreren Entwicklungsdatenbanken zu Staging / Produktion. Grundsätzlich werden eine Reihe von Änderungsskripten benötigt, die zu einem einzigen Skript zusammengeführt werden, wobei jedes Skript in eine IF whatever BEGIN ... END
Anweisung eingeschlossen wird.
Einige der Skripte erfordern jedoch eine GO
Anweisung, damit der SQL-Parser beispielsweise nach der Erstellung eine neue Spalte kennt.
ALTER TABLE dbo.EMPLOYEE
ADD COLUMN EMP_IS_ADMIN BIT NOT NULL
GO -- Necessary, or next line will generate "Unknown column: EMP_IS_ADMIN"
UPDATE dbo.EMPLOYEE SET EMP_IS_ADMIN = whatever
Sobald ich das jedoch in einen IF
Block einpacke:
IF whatever
BEGIN
ALTER TABLE dbo.EMPLOYEE ADD COLUMN EMP_IS_ADMIN BIT NOT NULL
GO
UPDATE dbo.EMPLOYEE SET EMP_IS_ADMIN = whatever
END
Es schlägt fehl, weil ich eine BEGIN
ohne Übereinstimmung sende END
. Wenn ich das jedoch entferne GO
, beschwert es sich erneut über eine unbekannte Spalte.
Gibt es eine Möglichkeit, dieselbe Spalte in einem einzelnen IF
Block zu erstellen und zu aktualisieren ?
GO
, es muss eine eigene Zeile sein, damit Sie nur nach diesem Fall suchen können und nicht nach jeder Instanz des Wortes GO
. 2) Sie können jederzeit protokollieren, welche Anweisungen erfolgreich abgeschlossen wurden. Oder Sie können das Ganze in einen Versuch / Fang einwickeln und Ihre eigenen Zeilennummern mit einer Variablen wie @lineNo verwenden, die Sie verfolgen und über Fehler berichten. Da Sie diese automatisch generieren, sollten Änderungen wie diese ein Kinderspiel sein. Es hört sich einfach so an, als ob Sie diese Route einfach nicht erkunden möchten, wenn ich denke, dass es Lösungen für all Ihre Anliegen gibt.