Spalte erstellen und innerhalb derselben Transaktion einfügen?

9

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.

    
Nenotlep 06.05.2014, 11:55
quelle

3 Antworten

15

Eine weitere Alternative, wenn Sie den Code nicht in separate Stapel aufteilen möchten, ist EXEC um einen verschachtelten Bereich / Stapel zu erstellen:

%Vor%

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.

    
Damien_The_Unbeliever 06.05.2014, 13:15
quelle
2

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).

%Vor%     
Szymon 06.05.2014 12:07
quelle
1

Rufen Sie "go" auf, nachdem Sie die Tabelle geändert haben

%Vor%

Übergabe übernehmen

    
Surrogate 06.05.2014 12:08
quelle