1

サーバーで発生する DDL イベントへの変更を監査する DDL トリガーがあります。

トリガー内のコードは、イベントデータを読み取り、それをテーブルに書き込みます。

その操作を TSQL の try-catch でラップしたいので、何らかの理由で失敗した場合は、障害を SQL ログに記録しますが、操作は実行されますが、うまくいかないようです。書き込む必要があるテーブルがまだ存在することを確認するために if exists を既に使用していますが、予期しないエラーをトラップし、トリガーを可能な限り堅牢にしたいと考えています。

DDL トリガーは、通常の T-SQL とは異なる動作をしているようで、TRY-CATCH ブロックを尊重していないようです。

次のコードは、SP にある場合は正常に機能しますが、DDL トリガーにある場合は機能しません。

BEGIN TRY
-- Simulate an error
RAISERROR ('Just a test!', 14, 1);
END TRY

BEGIN CATCH
DECLARE @errorNumber INT = ERROR_NUMBER()
DECLARE @errorMessage NVARCHAR(2048) = ERROR_MESSAGE() + '('
    + CAST(ERROR_NUMBER() AS NVARCHAR) + ')'

-- Log the error to the SQL server event log
EXEC master..xp_logevent 50005, @errorMessage, WARNING
END CATCH; 

何か案は?

4

1 に答える 1

1

トリガーから XP logevent を使用することはできませんhttp://technet.microsoft.com/en-us/library/ms186244.aspx 理由についてはコメントをご覧ください

于 2013-09-13T18:28:07.223 に答える