2011-04-20 22 views
0

外部ストアドプロシージャからストアドプロシージャに起因するエラーのコレクションを取得したいと考えています。それを得る方法はありますか?Sql Server 2008キャッチエラーコレクション

サンプルは以下のとおりです。私は、SQL Serverのコレクションまたはサーバー変数があり、私も1秒80054.に関する情報を取得したいと思い、最初のエラー80125.を得る


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;ワークステーション:VENTURE - あいまいなエラーの解決は - 次のエラーが第五潜在的に不正なパラメータによって引き起こされた


これは、より多くのコードなしでは不可能である
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

タイトルのように、タグや2008のように2005年を意味しますか? –

答えて

1

- 最初のエラーがスローされた後、内側の手続きが終了ブロックのCATCHのコードが実行されます。

いくつかのエラーを外部コードに戻す前にトラップする必要がある場合は、内部プロシージャでより複雑なエラー処理を記述し、各エラーを独自のTRY...CATCHブロックにラップし、エラーを一時テーブルの内容を取得して表示することができる外部コードに制御を戻すために新しいエラーを投げる前に一時テーブル。このアプローチは機能するはずですが、維持することは非常に難しいでしょう。

+0

ありがとうございます –