如何从SQL Server过程中获取所有错误消息

时间:2015-09-22 11:28:02

标签: sql sql-server try-catch

在我的程序中使用try catch块来捕获错误详细信息并登录到Log to table以供将来参考。但是使用Error_message()只获取最后一条错误消息。

例如,在执行下面的代码时,它会生成两条错误消息

ALTER TABLE [MFClassProperty]

DROP CONSTRAINT [FK_MFClassProperty_MFProperty]

错误消息

Msg 3728, Level 16, State 1, Line 161
'FK_MFClassProperty_MFProperty2' is not a constraint.
Msg 3727, Level 16, State 0, Line 161
Could not drop constraint. See previous errors.

使用我的try catch阻止其日志只显示最后一条错误消息,该消息很难找到问题。

有没有办法同时获得这两种错误信息[在这种情况下]。

我的catch块代码正在下面添加

BEGIN CATCH
        ROLLBACK TRANSACTION

        SET NOCOUNT ON

        IF @Debug > 0
        BEGIN
            --------------------------------------------------
            -- INSERTING ERROR DETAILS INTO LOG TABLE
            --------------------------------------------------
            INSERT INTO MFLog (
                SPName
                ,ErrorNumber
                ,ErrorMessage
                ,ErrorProcedure
                ,ErrorState
                ,ErrorSeverity
                ,ErrorLine
                ,ProcedureStep
                )
            VALUES (
                'spName'
                ,Error_number()
                ,Error_message()
                ,Error_procedure()
                ,Error_state()
                ,Error_severity()
                ,Error_line()
                ,@ProcessStep
                )
        END             
    END CATCH

1 个答案:

答案 0 :(得分:0)

我认为这是SQL Server的一个限制,它只会返回上一条错误消息。

从技术上讲,您收到两个错误:

  • 3728 ' FK_MFClassProperty_MFProperty2'不是约束。
  • 3727 无法删除约束。查看以前的错误。

SQL Server因此返回最后一个。即 3727

看看以下主题:

SQL Server try-catch inner exception message conundrum