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.

War es hilfreich?

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.

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

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 .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top