Ich habe eine einfache Transaktion, wo ich eine E-Mail an einige Benutzer senden, und speichern Sie die E-Mail-Daten in einer Tabelle.Fehler beim Senden der E-Mail nicht möglich
Meine aktuelle Abfrage sieht so aus.
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
Irgendwie, wenn ich die E-Mail-Protokolltabelle überprüfen, wird der Wert auf y festgelegt. Die Transaktion scheint aus irgendeinem Grund nicht rückgängig zu machen.
Ich bin sicher, mir fehlt hier etwas Einfaches.
Edit:
den Code Stellt sich heraus, funktioniert nicht, wenn die Abfrage fehlschlägt. Es kümmert sich um andere Fehler. Wenn die Abfrage jedoch aus irgendeinem Grund fehlschlägt, gibt @@ Fehler den Wert 0 zurück und es tritt auch keine Ausnahme auf.
Wenn es erfolgreich ausgeführt werden kann, warum wird es zurückgesetzt? –
zweiter Teil wird erfolgreich ausgeführt. Der erste Teil scheitert, ich habe mich davon überzeugt. auch dann geht es weiter zum zweiten Teil. Wenn die E-Mail nicht gesendet werden konnte, sollte sie anhalten, tut dies aber nicht. – jitendragarg