【问题标题】:How to get all error messages from SQL server procedure如何从 SQL Server 过程中获取所有错误消息
【发布时间】:2015-12-19 08:37:44
【问题描述】:

在我的程序中,我使用 try catch 块来捕获错误详细信息并登录到日志表以供将来参考。但是使用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

【问题讨论】:

标签: sql sql-server try-catch


【解决方案1】:

我相信这是 SQL Server 的一个限制,它只会返回最后一条错误消息。

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

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

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

看看下面的帖子:

SQL Server try-catch inner exception message conundrum

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-13
    相关资源
    最近更新 更多