Nen*_*lep 10 t-sql sql-server transactions alter-table
是否可以在同一个事务中创建一个列并向其插入值?这是升级脚本的一部分.我在网上找到了以下方法,但它不起作用; 我收到一个错误:Invalid column name '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'
Run Code Online (Sandbox Code Playgroud)
[IndexNumber]不是标识列的原因是它必须是可编辑的.
Dam*_*ver 18
如果您不想将代码拆分为单独的批处理,另一种方法是使用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'
Run Code Online (Sandbox Code Playgroud)
原始代码无法工作的原因是因为它在运行之前尝试编译整个批处理 - 编译失败,所以它甚至从未启动事务,让我们改变表.
| 归档时间: |
|
| 查看次数: |
8141 次 |
| 最近记录: |