SQL Serverの2005年からのエラー@@にdbmailを送信
-
26-09-2019 - |
質問
私はdbo.sp_send_dbmailが正しいことのためにエラーがtransaction.Myセットアップの内部で発生したときに、私は私が行うprocは1分以内にメールを取得する実行すると、データベースメールを送信しようとしています。
しかし、私は私が電子メールを取得しないよりも、トランザクション内の別のprocの内側にdbo.sp_send_dbmailを使用しようとします。 SQL Serverは、「メールがキューに入れられた」が、私はそれを受け取ったことがないという結果ウィンドウでショーを行います。
タグのBEGIN TRANSACTION
DECLAREの@err int型 DECLARE @Test NVARCHAR(MAX)
RAISERROR( 'これはテストです'、16、1) SELECT @err = @@ ERROR
@err IF <> 0 BEGIN
SET @Test = ERROR_MESSAGE()
EXEC msdb.dbo.sp_send_dbmail
受信者= 'mail@mail.net' @、
@body = 'テスト内部'、
@subject = 'PROCでエラー'、
@body_format = 'HTML'、
@append_query_error = 1、
@profile_name =「データベースメールプロファイル」;
ROLLBACK TRANSACTION RETURN END
トランザクションをコミット
私は
として結果を取得しますメッセージ50000、レベル16、状態1、行7
これはテストです
メールがキューに入れられました。
解決
それが出て行ったことがないので、あなたが戻ってそれをロール、トランザクションの外部電子メールコードを置く
ラインに関する書籍から
からsp_send_dbmailを実行する場合 既存のトランザクション内で、 データベースメールは、ユーザーにに依存しています いずれかのいずれかのコミットやロールバック 変更。これは、インナーを開始しません トランザクションます。
他のヒント
あなたは、セーブポイントを作成してセーブポイントまでロールバックエラーの場合には、あなたの操作をしようとし、コミット後、メールメッセージを送信する必要があります。パターンと同様に処理し、ネストされたトランザクション例外に記載しましたA>。