5

Kann ich eine einzige gespeicherte Prozedur haben, um eine neue Spalte zu einer Tabelle hinzuzufügen und nachher an der Spalte zu arbeiten? Zum Beispiel habe ich folgende gespeicherte Prozedur:eine Spalte in der gespeicherten Prozedur hinzufügen

... 

alter table tb1 
add col1 varchar(1) null 

insert into tb1(col1) 
values ('Y') 

bekam ich eine Fehlermeldung,

col1 ungültig ist.

+0

Sie Befehl gehen execute Sie nach der Spalte hinzugefügt wird.? – Muthukumar

+5

Sie können nicht "GO" -Anweisungen in der Mitte einer gespeicherten Prozedur haben – LittleBobbyTables

+0

SQL Server überprüft, dass die Spalte vorhanden ist, wenn Sie den Prozess erstellen, daher müssten Sie die Spalte manuell hinzufügen, den Prozess erstellen und dann entfernen die Spalte, um dies zum Laufen zu bringen. Ich würde die dynamische SQL-Problemumgehung vorschlagen, die @LittleBobbyTables hinzugefügt hat, obwohl möglicherweise stattdessen 'sp_executesql' verwendet wird. –

Antwort

11

Versuchen Sie, die Tabelle mit dem Standardwert 'Y' zu erstellen, anstatt die Werte anschließend einzufügen.

alter table tb1 add col1 varchar(1) not null DEFAULT ('Y') 

Sie würden GO zwischen den beiden Linien müssen die Tabelle erstellt hat, gemäß der GO Dokumentation:

SQL Server-Dienstprogramme GO als ein Signal interpretieren, dass sie die aktuellen Charge senden sollen Transact-SQL-Anweisungen zu einer Instanz von SQL Server.

Sie können jedoch keine GO Anweisungen in gespeicherten Prozeduren haben.

EDIT

Alternativ können Sie die EXEC Anweisung verwenden Sie den Code auszuführen:

EXEC ('alter table tb1 add col1 varchar(1) null') 
EXEC ('update tb1 set col1 = ''Y''') 
+0

Ich gebe nur ein Beispiel, in Wirklichkeit habe ich viele andere Sachen in der gespeicherten Prozedur zu tun. Ich frage mich nur, ob ich den Tisch außerhalb des Ladens ändern muss? – GLP

+0

@GaolaiPeng - siehe meine Bearbeitung – LittleBobbyTables

+1

Im Allgemeinen ist es eine bessere Wahl, Tabellen außerhalb eines gespeicherten Proc zu ändern. Möchten Sie wirklich jedes Mal, wenn der Prozess läuft, eine Spalte hinzufügen oder nur einmal hinzufügen? PLus Sie sollten alle Strukturänderungen als SQl-Skripte speichern und in die Quellcodeverwaltung einfügen, um es einfacher zu machen, sie zu prod zu verschieben oder die Datenbank auf einem anderen Server neu zu erstellen. – HLGEM