如何在 SQL Server 中为列添加默认值并使用默认值在单个批次中更新所有行?
我尝试执行以下代码作为事务中迁移的一部分,但除非我将 GO
语句放在 ADD CONSTRAINT
语句之后,否则代码会失败:
ALTER TABLE T ADD C INT NULL
ALTER TABLE T ADD CONSTRAINT DF_T_C DEFAULT ((1)) FOR C
GO
UPDATE T SET C = DEFAULT
ALTER TABLE T ALTER COLUMN C INT NOT NULL
如果我离开在 GO
语句中我收到以下错误:
列名“C”无效。
执行迁移的代码无法处理 GO 语句,我怎样才能让它在单个事务中工作?
I am trying to execute the following code as part of a migration in a transaction, but the code fails unless I put the GO
statement after the ADD CONSTRAINT
statement:
ALTER TABLE T ADD C INT NULL
ALTER TABLE T ADD CONSTRAINT DF_T_C DEFAULT ((1)) FOR C
GO
UPDATE T SET C = DEFAULT
ALTER TABLE T ALTER COLUMN C INT NOT NULL
If I leave out the GO
statement I get the following error:
Invalid column name 'C'.
The code executing the migration cannot handle the GO
statement, how can I get this to work in a single transaction?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
我最终得到了这个,它在一个语句中完成了所有操作:
Works with SQL Server。
I ended up with this, which does everything in one statement:
Works with SQL Server.
您可以对有问题的语句使用 EXEC,以便将它们编译为不同的批次。
但您也可以这样做,
而不是自己执行所有这些单独的步骤。
You can use
EXEC
for the problematic statements so they get compiled as a different batch.But you can also do
Rather than doing all these individual steps yourself.