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

我有一个要求,我需要改变(添加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

Invalid column name ‘c1’. Msg 207,

Level 16,Line 5

Invalid column name ‘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;

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

相关文章

(一)日志传送架构 (1.1)相关服务器 主服务器 :用于生产的服务器,上面运行这生产SQL Server数据库...
(一)事故背景 最近在SQL Server 2012生产数据库上配置完事物复制(发布订阅)后,生产数据库业务出现了...
(一)测试目的 目前公司使用的SQL SERVER 2012高可用环境为主备模式,其中主库可执行读写操作,备库既...
(一)背景个人在使用sql server时,用到了sql server的发布订阅来做主从同步,类似MySQL的异步复制。在...
UNION和OR谓词 找出 product 和 product2 中售价高于 500 的商品的基本信息. select * from product wh...
datawhale组队学习task03