日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

SQL Server -- SQLserver 存储过程执行错误记录到表

發布時間:2023/12/19 数据库 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 存储过程执行错误记录到表的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。