-1

所以我創建的(我曾經在其他網站上找到了一些東西)來處理交易,並在執行存儲過程可以調用需要交易等您是否看到該存儲過程模板的任何問題?

所以如果我有其他存儲過程有一種堆棧跟蹤的一個調用呼籲çç得到一個錯誤,我可以正確回滾我的東西,並返回一個堆棧跟蹤說法:用C錯誤,請跟蹤,找出/如何/ etc ...

你們有沒有發現這個邏輯有問題?

SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 

CREATE PROCEDURE [dbo].[NAME] 
AS 
BEGIN 
    SET NOCOUNT ON 
    SET XACT_ABORT ON 

    declare @trancount int 
    set @trancount = @@trancount 
    declare @savePointName varchar(40) 
    set @savePointName = newid() 

    BEGIN TRY 
     if @trancount = 0 
      begin transaction 
     else 
      save transaction @savePointName 

     /* 
     // STUFF HERE 
     */ 

     if @trancount = 0 
      commit transaction 
    END TRY 
    BEGIN CATCH 
     declare @xstate int 
     set @xstate = XACT_STATE() 
     if @xstate = -1 and @trancount = 0 
      rollback transaction 
     if @xstate = 1 and @trancount = 0 
      rollback transaction 
     if @xstate = 1 and @trancount > 0 
      rollback transaction @savePointName 

     declare @message varchar(max) 
      set @message = ERROR_MESSAGE() + 
         ' (' + ERROR_PROCEDURE() + 
         ':' + ltrim(str(ERROR_LINE())) + 
         ', Raised ' + ltrim(str(ERROR_NUMBER())) + 
         ', Severity ' + ltrim(str(ERROR_SEVERITY())) + 
         ', State ' + ltrim(str(ERROR_STATE())) + ')' 

     RAISERROR(@message,16,1) 
    END CATCH 
END 
+0

你想讓我們看看有什麼錯誤嗎? – JonH 2009-12-03 13:44:38

+0

不,我想知道是否有人發現任何邏輯問題,到目前爲止它似乎工作正常,但它似乎在Adobe生命週期中可能有問題 – Fredou 2009-12-03 13:50:02

+0

爲什麼投票? – Fredou 2009-12-08 19:19:18

回答

1

不,我不能發現這段代碼有什麼問題。