繁体   English   中英

alter table然后在单个语句中更新

[英]alter table then update in single statement

我有一个要求,我需要更改(添加2列),然后更新同一个表。

这是我试过的查询:

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

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

我需要一次运行上面两个查询。

我正在使用Talend ETL工具,在这里我们有一个组件tMssqlrow,它允许我们运行多个查询(我在单个组件中使用10到15个更新查询)。

但上面的查询不起作用。

我在DataBase Microsoft SQL中测试过。 我收到以下错误:

Msg 207,Level 16,State 1,Line 5

列名称“c1”无效。 消息207,

16级,1号,5号线

列名称“c2”无效。

任何人都可以帮我解决这个问题。

您无法在单个语句(或批处理)中完全执行此操作,并且您使用的工具似乎不支持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;

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

在两个查询之间使用GO。

试试这个

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

GO

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

GO

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM