如何记录存储过程错误

本文关键字:存储过程 错误 记录 何记录 | 更新日期: 2023-09-27 17:47:21

方案:C# 应用使用 SQL2000。它在应用程序中的尝试捕获中执行了 3 个存储的过程。在捕获中,错误被抑制。由于某些合法性,无法更改和实现 c# 代码。

问:如何将存储过程中的实际 SQL 错误捕获到日志文件或其他表中? @@Error向应用返回错误消息,但在查询分析器中计算时,它始终为 0,尽管"If @@Error <> 0"确实触发。我尝试存储@@Error数字,但它始终为 0。

请帮忙。

如何记录存储过程错误

当您

检查它时,@@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

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

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

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

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