【问题标题】:Transaction in Stored procedure存储过程中的事务
【发布时间】:2013-09-02 01:12:39
【问题描述】:

请有人帮忙。

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

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

【问题讨论】:

  • 在我看来,最好完全避免在存储过程中提交和回滚。

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


【解决方案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

【讨论】:

  • 谢谢,这正是我想要的。 :)
猜你喜欢
  • 2011-09-09
  • 2012-04-15
  • 2021-06-02
  • 1970-01-01
  • 1970-01-01
  • 2015-03-24
  • 1970-01-01
相关资源
最近更新 更多