Fehler "Ungültiger Spaltenname" beim Aufruf der Einfügung nach der erstellten Tabelle

8

Ich entwickle SQL-Skript mit SSMS, das einige Änderungen in der Datenbank vornimmt:

%Vor%

Wenn Table1 eine Spalte mit dem Namen Table2_Id hat, hat die Datenbank zwei Tabellen ( Table1 und Table2 ) und eine Fremdschlüsselbeziehung zwischen ihnen. In diesem Fall muss ich:

  • löscht die Fremdschlüsselbeziehung FK_Table1_Table2_Table2_Id ;
  • löscht die Fremdschlüsselspalte Table1.Table2_Id ;
  • drop Table2 ;
  • Erneutes Erstellen von Table2 unter Verwendung des neuen Tabellenschemas;
  • fügen Sie einen Standardwert in Table2 ein.

Wenn ich versuche, dieses Skript auszuführen, erhalte ich folgende Fehler:

  

Nachricht 207, Ebene 16, Status 1, Zeile 262 Ungültiger Spaltenname "Nummer".
  Meldung 207, Ebene 16, Status 1, Zeile 262 Ungültiger Spaltenname 'Name'.

Sieht so aus, als ob SQL Server das alte Schema für Table2 verwendet (was in der Tat nicht diese Spalten hat), aber wie ist das möglich, wenn die Tabelle gerade mit einem neuen Schema erstellt wurde?

Was mache ich falsch?

Die Serverversion ist SQL Server 2012 (SP1) - 11.0.3128.0 (X64).

AKTUALISIEREN .

Ich habe PRINT Aufrufe hinzugefügt (siehe Skript oben). Es gibt nichts im Nachrichtenfenster, außer Fehlermeldungen. Also, das Skript wird nicht ausgeführt ... Was ist los?

    
Dennis 23.04.2013, 09:31
quelle

1 Antwort

11

SQL Server versucht, den gesamten Stapel zu kompilieren. Wenn die Tabelle bereits existiert, wird sie gemäß der vorher existierenden Definition kompiliert. Die Anweisung, die auf die neuen Spalten verweist, wird nicht kompiliert und daher wird der Batch nie ausgeführt.

Sie müssen die Anweisungen unter Verwendung der neuen Definition in einem neuen Stapel gruppieren. Wenn Sie dies in SSMS ausführen, fügen Sie einfach ein GO

ein %Vor%

Andernfalls könnten Sie die problematische Zeile in einem untergeordneten Batch ausführen

%Vor%     
Martin Smith 23.04.2013, 10:45
quelle