gpt4 book ai didi

sql-server - 创建列并在同一事务中插入到其中?

转载 作者:行者123 更新时间:2023-12-02 09:57:42 25 4
gpt4 key购买 nike

是否可以在同一事务期间创建列并向其中插入值?这是升级脚本的一部分。我找到了以下方法online ,但是不起作用;我收到错误:列名“IndexNumber”无效。。我假设这是因为事务尚未创建该列,因此没有任何内容可插入。

我的脚本的相关部分:

Print 'Beginning Upgrade'
Begin Transaction
-- --------------------------------------------------------------------
USE [MyDatabase];

/* Widgets now can be ordered and the order can be modified */
ALTER TABLE [dbo].[Widgets] ADD [IndexNumber] [int] NULL;

DECLARE @ind INT
SET @ind = 0
UPDATE [dbo].[Widgets]
SET @ind = [IndexNumber] = @ind + 1;

ALTER TABLE [dbo].[Widgets] ALTER COLUMN [IndexNumber] [int] NOT NULL;
-- --------------------------------------------------------------------
Commit tran
Print 'Upgrade completed'

[IndexNumber] 不是标识列的原因是它必须是可编辑的。

最佳答案

如果您不想将代码拆分为单独的批处理,则另一种选择是使用 EXEC创建嵌套范围/批处理:

Print 'Beginning Upgrade'
Begin Transaction
-- --------------------------------------------------------------------
USE [MyDatabase];

/* Widgets now can be ordered and the order can be modified */
ALTER TABLE [dbo].[Widgets] ADD [IndexNumber] [int] NULL;

EXEC('DECLARE @ind INT
SET @ind = 0
UPDATE [dbo].[Widgets]
SET @ind = [IndexNumber] = @ind + 1;');

ALTER TABLE [dbo].[Widgets] ALTER COLUMN [IndexNumber] [int] NOT NULL;
-- --------------------------------------------------------------------
Commit tran
Print 'Upgrade completed'

原始代码不起作用的原因是它在运行之前尝试编译整个批处理 - 编译失败,因此它甚至从未启动事务,更不用说更改表了。

关于sql-server - 创建列并在同一事务中插入到其中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23494058/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com