一尘不染

更改表,然后在单个语句中更新

sql

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

谁能帮我解决这个问题。


阅读 120

收藏
2021-05-05

共1个答案

一尘不染

您无法在单个语句(或批处理)中 完全 做到这一点,并且似乎您所使用的工具不支持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;

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

2021-05-05