Ist es möglich, eine Spalte zu erstellen und während derselben Transaktion Werte einzufügen? Dies ist Teil eines Upgrade-Skripts. Ich fand die folgende Methode online , aber es funktioniert nicht; Ich erhalte einen Fehler: Invalid column name 'IndexNumber'.
. Ich gehe davon aus, dass dies daran liegt, dass die Transaktion die Spalte noch nicht erstellt hat, sodass nichts eingefügt werden muss.
Die relevanten Teile meines Skripts:
%Vor% Der Grund, warum [IndexNumber]
keine Identitätsspalte ist, ist, dass sie editierbar sein muss.
Eine weitere Alternative, wenn Sie den Code nicht in separate Stapel aufteilen möchten, ist EXEC
um einen verschachtelten Bereich / Stapel zu erstellen:
Der Grund, warum der ursprüngliche Code nicht funktioniert, weil er versucht, den gesamten Batch zu kompilieren , bevor er ausgeführt wird - die Kompilierung schlägt fehl und die Transaktion wird nicht einmal gestartet, sondern die Tabelle geändert.
Sie können keine neue Spalte hinzufügen und sie im selben Stapel verwenden. Sie müssen GO
zwischen dem Hinzufügen einer Spalte und ihrer Verwendung einfügen.
Die Transaktion ist immer noch in Ordnung (Sie können dies testen, indem Sie Commit tran
in rollback tran
ändern, um zu sehen, dass keine Änderungen festgeschrieben wurden).
Tags und Links sql-server tsql transactions alter-table