2008-09-26 8 views
4

シナリオ: C#appsはSQL2000を使用します。それは、アプリ内のtry catch内に3つのストアドプロシージャをエスケープします。キャッチでは、エラーは抑制されます。いくつかの合法性のために、c#コードは変更および実装できません。ストアドプロシージャエラーを記録する方法

Q:ストアドプロシージャの実際のSQLエラーをログファイルやその他のテーブルにトラップするにはどうすればよいですか? @@ Errorはアプリケーションにエラーメッセージを返しますが、クエリアナライザで評価すると 'If @@ Error <> 0'は起動しますが、常に0になります。 @@エラー番号を保存しようとしていますが、常に0です。

お手数ですが、

答えて

5

@@ERRORで確認してください。どうして?実行された最後のステートメントの状態を反映しているためです。

IF @@ERROR <> 0 ... 

文であり、そのステートメントが成功し、次のように検討し@@ERROR値を操作する@@ERRORは0

に設定させることは適切な方法は、次のとおり

DECLARE @ErrorCode INT 

INSERT INTO Table ... 

SET @ErrorCode = @@ERROR 
IF @ErrorCode <> 0 
BEGIN 
    INSERT INTO ErrorLog (ErrorCode, Message) 
     VALUES (@ErrorCode, 'The INSERT operation failed.') 
END 
1

なかったの私自身は試してみませんが、Sql Server Profilerでエラーを監視できます。

1
ALTER PROCEDURE [dbo].[StoreProcedureName] 
(
parameters 
) 
AS 
BEGIN 
    SET NOCOUNT On 
    BEGIN TRY    
     --type your query 

    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 
      RETURN -1 
    END CATCH 
End 
関連する問題