你看到该存储过程模板有任何问题吗?

时间:2009-12-03 13:42:23

标签: sql-server-2005 stored-procedures error-handling transactions stack-trace

所以我创建了(我在其他网站上找到了一些东西)来处理事务并在执行可以调用其他需要事务等存储过程的存储过程时进行堆栈跟踪。

所以,如果我 A 呼叫 B B 正在呼叫 C C 得到一个错误,我可以正确地回滚我的东西并返回一个堆栈跟踪说:C中的错误跟踪跟踪找出哪里/如何/等等...

你们中有人发现这个逻辑存在问题吗?

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

1 个答案:

答案 0 :(得分:1)

不,我无法发现此代码有任何问题。