0
私は一部のユーザーに電子メールを送信し、電子メールデータをテーブルに保存する簡単なトランザクションを持っています。電子メールの送信時にエラーをキャッチできません
現在のクエリは次のようになります。私は電子メールのログテーブルをチェックするとき
BEGIN TRANSACTION T1
BEGIN TRY
EXEC [MSDB].dbo.sp_send_dbmail @profile_name='Email Test',
@recipients='[email protected]',
@subject='Testing auto notification sql jobs. Please ignore',
@body_format = 'Text',
@body = 'Hello',
@query = 'some random query'
IF @@ERROR <> 0
BEGIN
ROLLBACK TRANSACTION T1
END
ELSE
BEGIN
Update TBL_Email_Log set EmailSent = 'Y'
COMMIT TRANSACTION T1
END
END TRY
BEGIN CATCH
PRINT ERROR_MESSAGE()
ROLLBACK TRANSACTION T1
END CATCH
GO
はどういうわけか、値がyに設定されています。トランザクションは何らかの理由でロールバックしていないようです。
私は確信しています、私はここで簡単なものを紛失しています。
編集:
クエリが失敗した場合、コードは機能しません。それは他のエラーを処理します。しかし、何らかの理由でクエリが失敗すると、@@ Errorはゼロを返し、例外も発生しません。
正常に実行できたら、なぜそれがロールバックされますか? –
2番目の部分が正常に実行されています。最初の部分は失敗している、私はそれを確認した。それでもそれは第二の部分に続きます。電子メールが送信に失敗した場合、停止する必要がありますが、停止しないでください。 – jitendragarg