请有人帮忙。
我在一个作业中有几个存储过程,在其中一个中我开始一个事务以删除一些行,如果行大于 10,那么我回滚。但是,如果没有我不想立即提交,因为 2 存储过程稍后我会做类似的事情。但是,如果在这种情况下计数大于 10,我希望它一直回滚到我盯着事务时(两个存储过程之前)
是否可以在存储过程中启动事务并在某处最后进行多次回滚和提交,或者我是否必须将所有代码放入 1 个存储过程中才能做到这一点?
请有人帮忙。
我在一个作业中有几个存储过程,在其中一个中我开始一个事务以删除一些行,如果行大于 10,那么我回滚。但是,如果没有我不想立即提交,因为 2 存储过程稍后我会做类似的事情。但是,如果在这种情况下计数大于 10,我希望它一直回滚到我盯着事务时(两个存储过程之前)
是否可以在存储过程中启动事务并在某处最后进行多次回滚和提交,或者我是否必须将所有代码放入 1 个存储过程中才能做到这一点?
您可以使用@@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