изменить таблицу, а затем обновить в одном выражении

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

Вот запрос, который я пробовал:

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

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

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

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

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

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

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

Недопустимое имя столбца "c1". Сообщение 207,

Уровень 16, состояние 1, линия 5

Недопустимое имя столбца "c2".

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


person Raghunath    schedule 01.04.2013    source источник
comment
добавьте GO после оператора ALTER.   -  person John Woo    schedule 01.04.2013
comment
если мы используем go в MSSQL, он работает, но я не могу использовать go в talend, talend вызывает ошибку :: синтаксическая ошибка рядом с go   -  person Raghunath    schedule 01.04.2013


Ответы (3)


Вы не можете сделать это точно в одном операторе (или пакете), и кажется, что используемый вами инструмент не поддерживает 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;

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

person Martin Smith    schedule 01.04.2013

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

person Nilesh Thakkar    schedule 01.04.2013

Попробуй это

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

GO

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

GO
person Harshil    schedule 01.04.2013