SQL Server -- SQLserver 存储过程执行错误记录到表
SQLserver 存儲過程執行錯誤記錄到表?
?
From: http://blog.csdn.net/leshami/article/details/51333650?
?
對于在執行存儲過程中碰到的一些錯誤,如果未及時捕獲或者說傳遞給前端應用程序來,在這樣的情形下,故障的排查顯得尤為困難。基于此,我們可以可以將這些錯誤信息記錄到日志,同時也可以將其傳遞給前端應用程序。
如本文的示例。
一、將錯誤信息記錄到表
CREATE TABLE ErrorLog
(
???????? ID???????????? INT IDENTITY (1,1) NOT NULL,
???????? ErrorNumber??? INT,
???????? ErrorMessage?? VARCHAR(1000),
???????? ErrorSeverity? INT,
???????? ErrorState???? INT,
???????? ErrorLine????? INT,
???????? ErrorProcedure VARCHAR(128),
???????? ErrorDate????? datetime
);
CREATE PROCEDURE CatchErrorDemo
AS --相關業務邏輯
??? BEGIN TRY
??????? SELECT? 1 / 0;
??? END TRY
--相關錯誤捕獲
??? BEGIN CATCH
??????? PRINT 'Error Number:' + CAST(ERROR_NUMBER() AS VARCHAR(10));
??????? PRINT 'Error Serverity: ' + CAST(ERROR_SEVERITY() AS VARCHAR(10));
??????? PRINT 'Error State: ' + CAST(ERROR_STATE() AS VARCHAR(10));
??????? PRINT 'Error Procedure: ' + ERROR_PROCEDURE();
??????? PRINT 'Error Line: ' + CAST(ERROR_LINE() AS VARCHAR(10));
??????? PRINT 'Error Message: ' + ERROR_MESSAGE();
??????? INSERT? INTO ErrorLog
??????????????? ( ErrorNumber ,
????????????????? ErrorSeverity ,
????????????????? ErrorState ,
????????????????? ErrorProcedure ,
????????????????? ErrorLine ,
????????????????? ErrorMessage ,
????????????????? ErrorDate
??????????????? )
??????? VALUES? ( ERROR_NUMBER() ,
????????????????? ERROR_SEVERITY() ,
????????????????? ERROR_STATE() ,
????????????????? ERROR_PROCEDURE() ,
????????????????? ERROR_LINE() ,
????????????????? ERROR_MESSAGE() ,
????????????????? GETDATE()
??????????????? )
??? END CATCH;
--執行相關存儲過程,并查詢日志表,同時與系統消息表進行對比
EXEC CatchErrorDemo;
SELECT * FROM ErrorLog;
二、傳遞錯誤信息
CREATE PROC CatchErrorDemo2
??? @a INT ,
??? @rtn VARCHAR(20) OUTPUT ,
??? @rtn_message VARCHAR(200) OUTPUT
AS
??? BEGIN
??????? BEGIN TRY
??????????? DECLARE @result INT;
??????????? SET @result = 'A' + @a;
??????? END TRY
??????? BEGIN CATCH
??????????? SET @rtn = @@ERROR;
??????????? SET @rtn_message = 'Error Number: '
??????????????? + CAST(ERROR_NUMBER() AS VARCHAR(10)) + ' Error Serverity: '
??????????????? + CAST(ERROR_SEVERITY() AS VARCHAR(10)) + ' Error State: '
??????????????? + CAST(ERROR_STATE() AS VARCHAR(10)) + ' Error Procedure: '
??????????????? + ERROR_PROCEDURE() + ' Error Line: '
??????????????? + CAST(ERROR_LINE() AS VARCHAR(10)) + ' Error Message: '
??????????????? + ERROR_MESSAGE();
??????? END CATCH;
??? END;
GO
--調用存儲過程
DECLARE @rtn INT ,
??? @rtn_message VARCHAR(200);
EXEC CatchErrorDemo2 0, @rtn OUTPUT, @rtn_message OUTPUT;
PRINT @rtn;
PRINT @rtn_message;
--Result:
245
Error Number: 245 Error Serverity: 16 Error State: 1 Error Procedure: CatchErrorDemo2 Error Line: 10
Error Message: 在將 varchar 值 'A' 轉換成數據類型 int 時失敗。
?
轉載于:https://blog.51cto.com/57388/1859828
總結
以上是生活随笔為你收集整理的SQL Server -- SQLserver 存储过程执行错误记录到表的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: box2d 碰撞检测_(译)如何使用bo
- 下一篇: linux cmake编译源码,linu