2

トランザクション内でエラーが発生したときにデータベースメールを送信しようとしています。dbo.sp_send_dbmailの設定は正しいですが、procを実行すると、1分以内にメールが届きます。

ただし、トランザクション内の別のproc内でdbo.sp_send_dbmailを使用しようとすると、電子メールが届きません。SQLサーバーは結果ウィンドウに「メールがキューに入れられました」と表示しますが、受信しません。

トランザクションの開始

DECLARE @err int DECLARE @test nvarchar(max)

RAISERROR('これはテストです'、16、1)SELECT @err = @@ ERROR

IF @err <> 0 BEGIN

SET @test = error_message()

EXEC msdb.dbo.sp_send_dbmail
@ receiveits ='mail@mail.net'、@
body ='test inside'、
@ subject ='Error with proc'、
@body_format ='HTML'、
@append_query_error = 1、
@profile_name = 'データベースメールプロファイル';

ロールバックトランザクションリターンエンド

トランザクションのコミット

そして、私は次のように結果を得る

メッセージ50000、レベル16、状態1、行7
これはキューに入れられたテスト
メールです。

4

2 に答える 2

3

あなたはそれをロールバックしたので、それは決して消えませんでした、トランザクションの外に電子メールコードを置いてください

オンラインの本から

既存のトランザクション内からsp_send_dbmailを実行する場合、Database Mailは、変更をコミットまたはロールバックするためにユーザーに依存します。内部トランザクションは開始されません。

http://msdn.microsoft.com/en-us/library/ms190307.aspx

于 2010-06-10T19:47:25.083 に答える
0

セーブポイントを作成し、操作を試行する必要があります。セーブポイントへのロールバックでエラーが発生した場合は、メールメッセージを送信してからコミットしてください。例外処理とネストされたトランザクションで説明されているパターンに似ています。

于 2010-06-10T23:48:27.630 に答える