【问题标题】:How to log a stored procedure error如何记录存储过程错误
【发布时间】:2010-09-13 09:03:00
【问题描述】:

场景: C# 应用程序使用 SQL2000。它在应用程序的 try catch 中执行 3 个存储过程。在 catch 中,错误被抑制。由于某些合法性,c# 代码无法更改和实施。

问:如何将存储过程中的实际 SQL 错误捕获到日志文件或其他表中? @@Error 向应用程序返回一条错误消息,但在查询分析器中评估时,它始终为 0,尽管 'If @@Error 0' 确实会触发。我尝试存储@@Error 编号,但它始终为 0。

请帮忙。

【问题讨论】:

    标签: c# sql-server


    【解决方案1】:

    @@ERROR 在您检查时重置为 0。为什么?因为它反映了最后执行的语句的状态。

    IF @@ERROR <> 0 ...
    

    是一个语句,并且该语句成功,导致@@ERROR被设置为0。

    检查和操作@@ERROR值的正确方法如下:

    DECLARE @ErrorCode INT
    
    INSERT INTO Table ...
    
    SET @ErrorCode = @@ERROR
    IF @ErrorCode <> 0
    BEGIN
        INSERT INTO ErrorLog (ErrorCode, Message)
            VALUES (@ErrorCode, 'The INSERT operation failed.')
    END
    

    【讨论】:

      【解决方案2】:

      手头没有例子,但看看使用

      RAISERROR ... WITH LOG
      

      请参阅:http://msdn.microsoft.com/en-us/library/aa238452(SQL.80).aspx 了解更多信息。

      或使用:

      xp_logevent {error_number, 'message'} [, 'severity']
      

      写入事件日志。更多详情http://msdn.microsoft.com/en-us/library/aa260695(SQL.80).aspx

      【讨论】:

        【解决方案3】:

        自己没有尝试过,但我想您可以使用 Sql Server Profiler 监控错误。

        【讨论】:

          【解决方案4】:
          ALTER PROCEDURE [dbo].[StoreProcedureName] 
          (
          parameters 
          )
          AS
          BEGIN
              SET NOCOUNT On
              BEGIN TRY               
                  --type your query   
          
              End Try
              BEGIN CATCH
                  SELECT
                          ERROR_NUMBER() AS ErrorNumber,
                          ERROR_SEVERITY() AS ErrorSeverity,
                          ERROR_STATE() AS ErrorState,
                          ERROR_PROCEDURE() AS ErrorProcedure,
                          ERROR_LINE() AS ErrorLine,
                          ERROR_MESSAGE() AS ErrorMessage
                      RETURN -1
              END CATCH
          End
          

          【讨论】:

            猜你喜欢
            • 2011-08-10
            • 2010-12-06
            • 2017-03-24
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-03-20
            • 2020-01-11
            • 2018-02-24
            相关资源
            最近更新 更多