2013-04-01 13 views
14

Mam wymaganie, gdy muszę zmienić (dodaj 2 kolumny), a następnie zaktualizuj tę samą tabelę.zmień tabelę, a następnie zaktualizuj w pojedynczym komunikacie

Oto zapytanie Próbowałem:

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

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

potrzebne do uruchomienia dwóch powyższych pytań na raz.

Używam narzędzia Talend ETL, w tym mamy komponent tMssqlrow, który pozwala nam na uruchamianie wielu zapytań (używam od 10 do 15 zapytań o aktualizację w jednym komponencie).

Ale powyższe zapytanie nie działa.

Przetestowałem w DataBase Microsoft SQL. Dostaję poniższy błąd:

Msg 207, Level 16, State 1, wiersz 5

Nieprawidłowy kolumna nazwa 'C1'. Msg 207,

Level 16, State 1, Linia 5

Nieprawidłowy Nazwa kolumny 'c2'.

może mi pomóc rozwiązać ten problem.

+2

dodatek '' GO' po oświadczeniu ALTER'. –

+0

jeśli użyjemy go w MSSQL działa, ale nie mogę użyć go w talend, talen jest błędem thogging :: błąd składniowy w pobliżu przejdź – Raghunath

Odpowiedz

24

Nie można wykonać tego dokładnie w pojedynczej instrukcji (lub partii) i wygląda na to, że używane narzędzie nie obsługuje GO jako ogranicznika wsadowego.

Możesz użyć EXEC, aby uruchomić go w grupie potomnej.

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

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

UWAGA: Wszystkie pojedyncze cudzysłowy w zapytaniu należy podwoić jak wyżej uciec je wewnątrz łańcucha dosłownym.

Alternatywnie można uzyskać podobne wyniki w pojedynczym zestawieniu za pomocą niektórych domyślnych ograniczeń.

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; 

Ale to nie jest dokładnie taka sama jak w oryginalnym zapytaniu jako domyślne ograniczenia zostaną pozostawione i mogą wymagać spadła.

+0

dziękuję, że to podejście działa. – Raghunath

+1

+1. @ 123456 Jeśli to rozwiązanie odpowie na twoje pytanie, zaznacz tę odpowiedź jako zaakceptowaną :-) – Sepster

0

Użyj GO między Twoimi 2 zapytaniami.

-1

Spróbuj

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

GO 

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

GO 
Powiązane problemy