11

我想知道它是否可以抑制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 :)

+0

好時機,先生,我正要發佈此...它看起來就像是在給你的代碼非常類似的問題,工作:) – amarsuperstar 2010-09-16 09:43:47

回答

10

你描述了一個「自治事務」,這是從Oracle(支持它們)遷移到MSSQL的人(通常不會)的常見問題。 This article介紹各種選項,遺憾的是都沒有特別吸引人:

  1. 環回鏈接服務器
  2. 從CLR過程
  3. 存儲數據,因爲它們不影響表變量的環回連接通過回滾
  4. 從擴展存儲過程中的環回連接(但它們無論如何不建議使用有利於CLR過程)

如果沒有ö如果這些選項對你來說是實用的,另一種選擇是將某種控制轉換爲應用程序並從數據庫中移出,但當然這只是將問題轉移到另一個位置。不過,這可能值得考慮。

相關問題