在 sql server 事务中更改表和更新

Hug*_*nti 5 sql-server alter-table

我正在尝试做一个更改表来在表上添加一个新列,然后我想对表中的现有行进行一些更新以向最近添加的列添加一个值,最后执行一个 select * 以检查一切是否正常,然后回滚整个事情。

就像是

declare @transactionNameA varchar(20);
declare @transactionNameB varchar(20);
select @transactionNameA = 'TransactionA';
select @transactionNameB = 'TransactionB';

begin transaction @transactionNameA
alter table A add Column int;

begin transaction @transactionNameB
update A set Column = 1 where ID=1;
select * from A;

rollback transaction @transactionNameB;
rollback transaction @transactionNameA;
Run Code Online (Sandbox Code Playgroud)

当我编写该代码时,我收到一条错误消息,指出该列不存在

我究竟做错了什么?感谢您的时间和帮助。

小智 8

您必须将其分成几批,因为[Column]不存在,因为语句被解析为一批,因此它看不到新列,因此您收到错误。

一旦您使用GO语句将其分成批次,该列将被添加到表中,然后您的下一批更新新列将成功。

完整示例:

DROP TABLE #A;
GO
CREATE TABLE #A (ID int IDENTITY(1,1), column1 varchar(1))
GO
INSERT INTO #A (column1)
VALUES('a'),('b'),('c')
GO

begin transaction
alter table #A add [Column] int;
go

begin transaction
update #A set [Column] = 1 where ID=1;
select * from #A;

rollback transaction;
GO

SELECT *
FROM #A
Run Code Online (Sandbox Code Playgroud)