Domanda

Sto cercando di inviare la posta database quando si verifica un errore all'interno della configurazione transaction.My per dbo.sp_send_dbmail è corretto, quando eseguo il proc faccio ottenere una e-mail entro 1 min.

Tuttavia quando provo ad usare dbo.sp_send_dbmail all'interno di un altro proc all'interno di transazioni che non ho ricevuto l'e-mail. sql server fa spettacolo nella finestra dei risultati che "posta in coda", ma non ho mai riceverlo.

  

BEGIN TRANSACTION

     

DECLARE @err int   DECLARE @test nvarchar (max)

     

RAISERROR ( 'Questo è un test', 16, 1)   SELEZIONA @err = @@ ERROR

     

Se @err <> 0   BEGIN

     

SET @test = error_message ()

     

EXEC msdb.dbo.sp_send_dbmail
        @ Destinatari = 'mail@mail.net',
        @body = 'test interno',
        @subject = 'Errore con proc',
        @body_format = 'HTML',
        @append_query_error = 1,
        @profile_name = 'Posta elettronica database Profilo';

     

ROLLBACK TRANSACTION    RITORNO   END

     

COMMIT TRANSACTION

E ho risultato come

  

Msg 50000, livello 16, stato 1, riga 7
  Questo è un test
  Posta in coda.

È stato utile?

Soluzione

È rotolato indietro in modo che non è mai andato fuori, inserire il codice di posta elettronica al di fuori della transazione

Dai libri on line

  

Quando si esegue sp_send_dbmail da   all'interno di una transazione esistente,   Posta elettronica database si basa su l'utente a   sia commettere o rullo posteriore qualsiasi   i cambiamenti. Non avviare un interno   transazione.

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

Altri suggerimenti

È necessario creare un punto di salvataggio, tentare l'operazione, in caso di rollback di errore al punto di salvataggio, inviare il messaggio di posta elettronica poi commesso. Simile al modello descritto in gestione delle eccezioni e le transazioni nidificate .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top