1

请有人帮忙。

我在一个作业中有几个存储过程,在其中一个中我开始一个事务以删除一些行,如果行大于 10,那么我回滚。但是,如果没有我不想立即提交,因为 2 存储过程稍后我会做类似的事情。但是,如果在这种情况下计数大于 10,我希望它一直回滚到我盯着事务时(两个存储过程之前)

是否可以在存储过程中启动事务并在某处最后进行多次回滚和提交,或者我是否必须将所有代码放入 1 个存储过程中才能做到这一点?

4

1 回答 1

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
于 2013-08-29T14:39:48.653 回答