2013-04-01 2 views
14

У меня есть требование, когда мне нужно изменить (Добавить 2 столбца), а затем обновить ту же таблицу.изменить таблицу, затем обновить в одном заявлении

Вот запрос я пробовал:

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

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

мне нужно запустить выше двух запросов в то время.

Я использую инструмент Talend ETL, у нас есть компонент tMssqlrow, который позволяет нам запускать несколько запросов (я использую от 10 до 15 запросов обновлений в одном компоненте).

Но вышеуказанный запрос не работает.

Я тестировал в базе данных Microsoft SQL. Я получаю ошибку ниже:

Msg 207, Level 16, State 1, Line 5

Invalid имя столбца 'c1'. Msg 207,

уровень 16, состояние 1, строка 5

Invalid столбец имя 'c2'.

Может ли кто-нибудь помочь мне решить эту проблему.

+2

надстройку 'GO' после' ALTER' заявления. –

+0

, если мы используем go в MSSQL, он работает, но я не могу использовать go to talend, talend - это ошибка: ошибка синтаксиса около go – Raghunath

ответ

24

Вы не можете сделать это точно в одном заявлении (или партии), и, похоже, инструмент, который вы используете, не поддерживает GO в качестве разделителя партии.

Вы можете использовать EXEC, чтобы запустить его в дочерней группе.

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

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

NB: Все одиночные кавычки в запросе должны быть в два раза, как указано выше, чтобы избежать их в строковый литерал.

Или, альтернативно, вы можете достичь аналогичных результатов в одном утверждении с помощью некоторых ограничений по умолчанию.

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; 

Но это не совсем так же, как в исходном запросе в качестве ограничения по умолчанию будут оставлены позади, и, возможно, придется отказаться.

+0

спасибо, что этот подход работает. – Raghunath

+1

+1. @ 123456 Если это решение отвечает на ваш вопрос, пожалуйста, отметьте этот ответ как принятый :-) – Sepster

0

Используйте GO между двумя вашими запросами.

-1

Попробуйте

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

GO 

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

GO