senden dbmail auf @@ Fehler von SQL Server 2005
-
26-09-2019 - |
Frage
Ich versuche, Datenbank E-Mail zu senden, wenn ein Fehler in der transaction.My Setup tritt für dbo.sp_send_dbmail korrekt ist, wenn ich das proc ausführen ich eine E-Mail innerhalb von 1 min erhalten.
Allerdings, wenn ich versuche dbo.sp_send_dbmail innerhalb von Transaktionen innerhalb eines anderen proc zu verwenden, als ich die E-Mail nicht bekommen. SQL Server ist Show im Ergebnisfenster, dass „Mail Warteschlange“ aber ich es nie erhalten.
BEGIN TRANSACTION
DECLARE @err int DECLARE @Test nvarchar (max)
RAISERROR ( 'Dies ist ein Test', 16, 1) SELECT @err = @@ ERROR
IF @err <> 0 BEGIN
SET @Test = error_message ()
EXEC msdb.dbo.sp_send_dbmail
@ Empfänger = 'mail@mail.net',
@body = 'Test innen',
@subject = 'Fehler mit proc',
@body_format = 'HTML',
@append_query_error = 1,
@profile_name = 'Datenbank Mail-Profil';
ROLLBACK TRANSACTION RÜCKKEHR END
COMMIT TRANSACTION
Und ich bekomme Ergebnis als
Msg 50000, Stufe 16, Status 1, Zeile 7
Dies ist ein Test
Mail Warteschlange.
Lösung
Sie rollte ihn zurück, so dass es nie ging, legte die E-Mail Code außerhalb der Transaktion
Von Büchern on line
Wenn sp_send_dbmail Ausführung von innerhalb einer bestehenden Transaktion, Database Mail verlässt sich auf den Benutzer entweder Commit oder Zurückdrängung der jede Änderungen. Es beginnt nicht mit einem inneren Transaktion.
Andere Tipps
Sie benötigen einen Sicherungspunkt erstellen, versuchen, Ihren Betrieb im Fehlerfall Zurückkehren zu dem Speicherpunkt, senden Sie die Nachricht dann begehen. Ähnlich wie das Muster beschrieben in Exception Handling und verschachtelte Transaktionen .