mssql sqlserver 记录存储过程错误的方法分享


摘要:
下文讲述存储过程错误的记录方法



1.创建日志表(存储错误信息)

CREATE TABLE [dbo].[t_ProcErrorLog](
    [ErrorLogID] [int] IDENTITY(1,1),
    [ErrorTime] [datetime] default getdate(),
    [UserName] [sysname],
    [ErrorNumber] [int],
    [ErrorSeverity] [int],
    [ErrorState] [int],
    [ErrorProcedure] [nvarchar](126),
    [ErrorLine] [int],
    [ErrorMessage] [nvarchar](4000)
 ) 

—————————–

2.创建存储过程供存储过程产生错误时调用

CREATE PROCEDURE [dbo].[proc_ProcErrorInsert]
    @ErrorLogID [int] = 0 OUTPUT --返回t_ProcErrorLog表的记录ID
AS                               
BEGIN
    SET NOCOUNT ON; 
    SET @ErrorLogID = 0;
    BEGIN TRY
        -- //判断有没有错误信息
        IF ERROR_NUMBER() IS NULL
            RETURN;  
        INSERT [dbo].[t_ProcErrorLog] 
            ([UserName],  [ErrorNumber],  [ErrorSeverity],  [ErrorState],  [ErrorProcedure], [ErrorLine], [ErrorMessage] ) 
        VALUES 
            (
            CONVERT(sysname, CURRENT_USER),ERROR_NUMBER(),ERROR_SEVERITY(),ERROR_STATE(),ERROR_PROCEDURE(),ERROR_LINE(),ERROR_MESSAGE()
            );
        SET @ErrorLogID = @@IDENTITY;
    END TRY
    BEGIN CATCH
        RETURN -1;
    END CATCH
END

———————–

3.创建存储过程,如果存储过程执行错误,则调用 日志存储过程

CREATE PROCEDURE myProcTest
AS
BEGIN
SET NOCOUNT ON;
BEGIN TRY--//开始捕捉异常
    BEGIN TRAN--//开始事务
    --//你的方法
    COMMIT TRAN --//提交事务
END TRY--//结束捕捉异常
BEGIN CATCH--//有异常被捕获
    IF @@TRANCOUNT > 0--//判断有没有事务
    BEGIN
        ROLLBACK TRAN--//回滚事务
    END 
    DECLARE @ErrorLogID INT ;
    EXEC proc_ProcErrorInsert @ErrorLogID OUTPUT;--//执行存储过程将错误信息记录在表当中
END CATCH--//结束异常处理
END