存储过程中的事务

时间:2013-08-29 14:28:19

标签: mysql sql sql-server stored-procedures transactions

请有人帮忙。

我在作业中有几个存储过程,在其中一个中我开始一个事务来删除一些行,如果行大于10,那么我回滚。但是如果不存在我不想马上提交,因为2存储过程后来我做了类似的事情。但是如果在这个实例中count大于10,我希望它一直回滚到我查看事务时(前两个存储过程)

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

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