2013-04-01 15 views
14

Ich habe eine Anforderung, wo ich ändern muss (Add 2 Spalten) und aktualisieren Sie dann die gleiche Tabelle. Hieralter table dann update in single statement

ist die Abfrage, die ich versuchte:

ALTER TABLE A 
ADD c1 int,c2 varchar(10) 

UPDATE A set c1 = 23, c2 = 'ZZXX' 

Ich brauche die oben genannten zwei Abfragen zu einem Zeitpunkt ausgeführt werden.

Ich benutze Talend ETL-Tool, in diesem haben wir eine Komponente tMssqlrow, die es uns ermöglichen, mehrere Abfragen auszuführen (ich verwende 10 bis 15 Update-Abfragen in einer Komponente).

Aber die obige Abfrage funktioniert nicht.

Ich habe in DataBase Microsoft SQL getestet. Ich erhalte die folgenden Fehler:

Msg 207, Ebene 16, Status 1, Zeile 5

Ungültiger Spaltenname 'c1'. Msg 207,

Ebene 16, Status 1, Zeile 5

Ungültiger Spaltenname 'c2'.

kann mir jemand helfen, dieses Problem zu lösen.

+2

add 'GO' nach dem' ALTER' Aussage. –

+0

Wenn wir in MSSQL gehen, funktioniert es, aber ich kann nicht verwenden gehen in Talend, Talend ist thrushing Fehler :: Syntaxfehler in der Nähe gehen – Raghunath

Antwort

24

können Sie dies nicht genau in einer einzigen Anweisung (oder Charge) und es scheint, das Werkzeug, das Sie nicht GO als Batch-Trennzeichen verwenden unterstützt.

Sie können EXEC verwenden, um es jedoch in einer untergeordneten Charge auszuführen.

ALTER TABLE A 
    ADD c1 INT, c2 VARCHAR(10); 

EXEC(' 
UPDATE A 
SET c1 = 23, 
     c2 = ''ZZXX''; 
    '); 

NB: Alle einfachen Anführungszeichen in der Abfrage müssen, wie oben verdoppelt werden, um sie wörtliche innerhalb einer Zeichenfolge zu entkommen.

Oder alternativ könnten Sie ähnliche Ergebnisse in einer einzigen Anweisung mit Hilfe einiger Standardbeschränkungen erreichen.

ALTER TABLE A 
    ADD c1 INT NULL CONSTRAINT DF_A_c1 DEFAULT 23 WITH VALUES, 
    c2 VARCHAR(10) CONSTRAINT DF_A_c2 NULL DEFAULT 'ZZXX' WITH VALUES; 

Aber das ist nicht genau das gleiche wie die ursprüngliche Abfrage als die Standardeinschränkungen zurückgelassen werden und müssen möglicherweise fallen gelassen werden.

+0

Danke, dass dieser Ansatz funktioniert. – Raghunath

+1

+1. @ 123456 Wenn diese Lösung Ihre Frage beantwortet, markieren Sie bitte diese Antwort als akzeptiert :-) – Sepster

0

Verwenden Sie GO zwischen Ihren 2 Abfragen.

-1

Versuchen Sie, diese

ALTER TABLE A ADD c1 int,c2 varchar(10) 

GO 

UPDATE A set c1 = 23, c2 = 'ZZXX' 

GO