代码之家  ›  专栏  ›  技术社区  ›  Tim Mahy

禁止存储过程中的事务

  •  11
  • Tim Mahy  · 技术社区  · 14 年前

    我想知道是否可以在SQL存储过程中抑制事务。我的SP中有以下情况(我希望实现):

    WHILE TRUE
    BEGIN TRY
        BEGIN TRANSACTION A
        RECEIVE MESSAGE FROM SSB QUEUE WITH TIMEOUT
    
        BEGIN SUPPRESS TRANSACTION 
          WHILE RECORD IN TABLE
             BEGIN TRANSACTION B
               DELETE RECORD FROM TABLE OUTPUT RECORD INTO D
               SEND RECORD D TO OTHER SSB QUEUE
             COMMIT TRANSACTION B
        END SUPPRESS TRANSACTION
        COMMIT TRANSACTION A
    END TRY
    BEGIN CATCH
        ROLLBACK TRANSACTION A
    END CATCH
    

    所以我真正想做的是事务B不会被登记在事务A中:)

    1 回复  |  直到 11 年前
        1
  •  12
  •   Pondlife    12 年前

    您描述的是一个“自治事务”,这是从Oracle(支持它们)迁移到MSSQL(不支持它们)的人经常遇到的问题。 This article

    1. 环回链接服务器
    2. 存储数据的表变量,因为它们不受回滚的影响

    如果这些选项都不适用于您,那么另一种选择是将一些控件移入应用程序并移出数据库,当然,这只是将问题转移到另一个位置。不过,这或许值得考虑。