请有人帮忙。
我在作业中有几个存储过程,在其中一个中我开始一个事务来删除一些行,如果行大于10,那么我回滚。但是如果不存在我不想马上提交,因为2存储过程后来我做了类似的事情。但是如果在这个实例中count大于10,我希望它一直回滚到我查看事务时(前两个存储过程)
是否可以在存储过程中启动事务并在最后某处进行多次回滚和提交,或者是否必须将所有代码放入1个存储过程才能执行此操作?
答案 0 :(得分:2)
您可以使用@@ TRANCOUNT确定是否有任何未完成的未提交事务,然后使用它来指示存储过程的逻辑。
CREATE PROCEDURE Proc1
AS
BEGIN
BEGIN TRANSACTION
// DO STUFF
IF (@@ROWCOUNT > 10)
ROLLBACK TRANSACTION
END
CREATE PROCEDURE Proc2
AS
BEGIN
IF (@@TRANCOUNT > 0)
BEGIN
// DO STUFF
IF (@@ROWCOUNT > 10)
ROLLBACK TRANSACTION
END
END
CREATE PROCEDURE Proc3
AS
BEGIN
IF (@@TRANCOUNT > 0)
BEGIN
// DO STUFF
IF (@@ROWCOUNT > 10)
ROLLBACK TRANSACTION
ELSE
COMMIT TRANSACTION
END
END