在SQLserver數據庫中,若是有不少存儲過程的時候,咱們會使用動態SQL進行存儲過程調用存儲過程,這時候,極可能在某個環節就出錯了,可是出錯了咱們很難去跟蹤到出錯的存儲過程,此時咱們就能夠使用異常處理,經過日誌表來記錄存儲過程的執行狀況,然而定位到錯誤的存儲過程,如下是一個存儲過程異常處理的小實例:數據庫
CREATE DATABASE TEST USE TEST /*===================================================== 相關錯誤消 息以下: ERROR_NUMBER() 返回錯誤號。 ERROR_SEVERITY() 返回嚴重性。 ERROR_STATE() 返回錯誤狀態號。 ERROR_PROCEDURE() 返回出現錯誤的存儲過程或 觸發器的名稱。 ERROR_LINE() 返回致使錯誤的例程中的行 號。 ERROR_MESSAGE() 返回錯誤消息的完整文本。 ========================================================*/
CREATE TABLE LogTable ( ID int identity(1,1),--錯誤序號
ErrorNumber int,--錯誤號
ErrorSeverity int,--嚴重性
ErrorState int,--錯誤狀態號
ErrorProducure varchar(200),--出現錯誤的存儲過程或 觸發器的名稱
ErrorLine int,--致使錯誤的例程中的行號
ErrorMessage varchar(200)--錯誤消息的完整文本
) --===============除數不爲0的異常捕獲=================--
IF EXISTS (SELECT * FROM sysobjects WHERE id=OBJECT_ID(N'getWrong') AND xtype='P') DROP PROC getWrong go
CREATE PROC getWrong AS
BEGIN
-----------------製造異常
BEGIN TRY SELECT 1/0; -----------------捕獲異常
END TRY BEGIN CATCH INSERT INTO LogTable values(ERROR_NUMBER(),ERROR_SEVERITY(),ERROR_STATE(),ERROR_PROCEDURE(), ERROR_LINE() ,ERROR_MESSAGE()) END CATCH END
--執行存儲過程
EXEC getWrong --查看日誌表
select * from LogTable --查看系統日誌表
SELECT * FROM sys.messages WHERE message_id=8134 AND language_id=2052
日誌表以下:ide
系統日誌表以下:spa
從上述2個咱們卡能夠看出,在系統日誌表中咱們只能夠看到錯誤的信息,可是不能具體定位到是哪個具體的存儲過程執行後出現的錯誤。日誌