19

我有一个需要更改(添加 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”无效。

谁能帮我解决这个问题。

4

3 回答 3

37

您不能在单个语句(或批处理)中完全执行此操作,而且您使用的工具似乎不支持GO作为批处理分隔符。

不过,您可以使用EXEC它在子批次中运行它。

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

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

注意:查询中的所有单引号都需要像上面那样加倍以在字符串文字中转义它们。

或者,您可以借助一些默认约束在单个语句中获得类似的结果。

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;

但这与原始查询并不完全相同,因为默认约束将被留下并可能需要删除。

于 2013-04-01T10:03:55.347 回答
3

在 2 个查询之间使用 GO。

于 2013-04-01T09:46:48.750 回答
0

试试这个

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

GO

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

GO
于 2013-04-01T10:04:19.877 回答