gpt4 book ai didi

sql-server - 围绕多个插入或更新使用事务的正确方法

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

测试插入/更新失败并回滚此事务(如果有)的正确方法是什么?我认为我所拥有的不会起作用,因为我的插入/更新是 3 个单独的语句,并且 @@ROWCOUNT 将仅反射(reflect)最后执行的语句。

BEGIN TRANSACTION Script;
GO

INSERT INTO TableA (id) VALUES (1)
INSERT INTO TableB (id) VALUES (1)
UPDATE TableC SET id=1 WHERE id=2
GO

IF (@@ROWCOUNT=3 AND @@ERROR=0)
BEGIN
COMMIT
END
ELSE
BEGIN
PRINT 'Error: Rolling back transaction'
ROLLBACK TRANSACTION Script
END
GO

最佳答案

如果在开始事务之前将 SET XACT_ABORT 设置为 ON,in case of an error, rollback will be issued automatically .

SET XACT_ABORT ON

begin transaction

INSERT INTO TableA (id) VALUES (1)
INSERT INTO TableB (id) VALUES (1)
UPDATE TableC SET id=1 WHERE id=2

commit transaction

如果你想自己回滚,use try .. catch block .

begin transaction

begin try

INSERT INTO TableA (id) VALUES (1)
INSERT INTO TableB (id) VALUES (1)
UPDATE TableC SET id=1 WHERE id=2

commit transaction

end try

begin catch
raiserror('Message here', 16, 1)
rollback transaction
end catch

关于sql-server - 围绕多个插入或更新使用事务的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10302697/

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