SQL THROWには、RAISERROR
が持つ重要な機能が欠けているようです。これは、エラー番号がアプリケーションログに記録されたときにアラートを発生させることができるようにWITH LOG
を使用する機能です。 。私を逃れる簡単な方法はありますか、それとももっと面倒なRAISERROR
とsp_addmessage
SPに頼る必要がありますか? THROW
ブロックでCATCH
を使用してアラートを介してオペレーターに通知できるようにしたいと思います。
いいえ、THROW
にはWITH LOG
を含むいくつかのRAISERROR
機能がありません。 SQL Server 2012がまだベータ版であったときに、これについてブログに書きましたが、それ以降、変更は加えられていません。
ただし、50000以外のカスタムメッセージ番号が必要な場合を除いて、RAISERROR
メッセージをログに送信するためにsp_addmessage
を使用する必要はありません。
DECLARE @s VARCHAR(32) = 'friend';
RAISERROR(N'What happened %s?', 19, 1, @s) WITH LOG;
結果:
質問の本質をもう一度読んで、あなたはおそらくあなたの究極の目標を達成するためにsp_addmessage
を使いたいと思うでしょう。ロギングをそれ自体から分離しようとすべきではありませんでした(他のエラーがログに記録され、別のアラートが必要な場合、50000はあまり役に立ちません)。
RAISERROR
によって生成されたメッセージのtextにエラー番号を入力する例:
BEGIN TRY
SELECT 1/0;
END TRY
BEGIN CATCH
DECLARE @err INT = ERROR_NUMBER();
RAISERROR(N'What happened %d?', 19, 1, @err) WITH LOG;
END CATCH