SQL Server 使用存储过程回滚

5anewei6  于 2022-11-21  发布在  其他
关注(0)|答案(3)|浏览(390)

我有一个复杂的脚本,其中包含许多我喜欢回滚的存储过程。
我问如果在这样的情况下:

BEGIN TRANSACTION;  

INSERT INTO ValueTable VALUES(1);  
INSERT INTO ValueTable VALUES(2);  

EXEC MyStoredProcedure

ROLLBACK;

MyStoredProcedure内的所有更新/插入都将回滚。
谢谢

u1ehiz5o

u1ehiz5o1#

是的,前提是

set xact_Abort on

在交易开始时。

yk9xbfzb

yk9xbfzb2#

你可以使用try catch来执行rollback,如果发生任何错误,否则执行commit。

BEGIN TRANSACTION;
BEGIN TRY
INSERT INTO TABLE1 VALUES('A',3,'E');   
    
INSERT INTO ValueTable VALUES(1);  
INSERT INTO ValueTable VALUES(2);  

exec MYstoreProcedure

END TRY
BEGIN CATCH 
IF @@TRANCOUNT > 0
    BEGIN   
    ROLLBACK TRANSACTION;
    throw;
    END 
END CATCH;
IF @@TRANCOUNT > 0
    BEGIN   
    COMMIT TRANSACTION;
    PRINT 'Successfully Completed'
    END
f87krz0w

f87krz0w3#

下面是处理嵌套过程中的SQL Server错误https://stackoverflow.com/a/74479802/6204480的示例

相关问题