質問

私は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を実行する場合   既存のトランザクション内で、   データベースメールは、ユーザーにに依存しています   いずれかのいずれかのコミットやロールバック   変更。これは、インナーを開始しません   トランザクションます。

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

他のヒント

あなたは、セーブポイントを作成してセーブポイントまでロールバックエラーの場合には、あなたの操作をしようとし、コミット後、メールメッセージを送信する必要があります。パターンと同様に処理し、ネストされたトランザクション例外に記載しましたA>。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top