2011-04-20 69 views
0

我想從外部存儲過程中獲取由存儲過程導致的錯誤集合。有沒有辦法解決這個問題。Sql Server 2008嘗試抓取錯誤集合

樣品如下。我得到的第一個錯誤80125.我也想獲得關於第二個80054.信息是否有SQL Server中的集合或服務器變量(我不知道如何從淨得到這個)


BEGIN TRY 

DECLARE @RC int 

EXEC @RC= TestErrorProc 

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 

END CATCH 

- 給出以下內容 80125 15 1 TestErrorProc 11數據庫自定義錯誤:過程:PROCEDURENAME;用戶:DBO;工作站:企業 - 歧義錯誤解決 - 以下錯誤是由第五可能無效的參數引起


CREATE PROCEDURE [dbo].[TestErrorProc] 

AS 

    DECLARE @intErr int, @intRows int, @strUser varchar(64), @strWks varchar(64) 

    DECLARE @strTraceMsg varchar(255) 

    DECLARE @intRet int 

    SELECT @strUser = USER_NAME(), @strWks = HOST_NAME() 

    SET @strTraceMsg = ' Row 1' 

     BEGIN 

     --Ambiguous Testing 

     RAISERROR(80125, 15, 1, 'PROCEDURENAME', @strUser, @strWks, 'TABLENAME-Column information') 
      RAISERROR(80054, 15, 1, 'PROCEDURENAME', @strUser, @strWks, @strTraceMsg, 'Issue details - business Error') 

     RETURN(-100) 

     END 
+1

你的意思是2005年,如在標籤中,還是2008年,如標題中所示? – 2011-04-20 20:33:01

回答

1

這是不可能沒有更多的代碼 - 一旦第一錯誤已被拋出,內過程退出並執行CATCH塊中的代碼。

如果您需要在將錯誤返回到外部代碼之前捕獲幾個錯誤,一種解決方案是在內部過程中編寫更復雜的錯誤處理,將每個錯誤包裝在其自己的TRY...CATCH塊中,並將錯誤插入一個臨時表在拋出新錯誤之前將控制權返回給外部代碼,這可以檢索並顯示臨時表的內容。這種方法應該可行,但可能很難維持。

+0

謝謝你的細節 – 2011-04-21 15:58:36