Question

Je suis en train d'envoyer des messages de base de données en cas d'erreur dans la configuration de transaction.My pour dbo.sp_send_dbmail est correct, quand j'exécute le proc je reçois un email à 1 min.

Cependant, lorsque je tente d'utiliser dbo.sp_send_dbmail dans un autre proc dans les transactions que je ne reçois pas l'e-mail. serveur sql ne affiche dans la fenêtre de résultat que « Mail file d'attente », mais je reçois jamais.

  

BEGIN TRANSACTION

     

DECLARE @err int   DECLARE @test nvarchar (max)

     

RAISERROR ( 'Ceci est un test', 16, 1)   SELECT @err = @@ ERROR

     

IF @err <> 0   BEGIN

     

SET @test = error_message ()

     

EXEC msdb.dbo.sp_send_dbmail
        @ Destinataires = 'mail@mail.net',
        @body = 'test intérieur',
        @subject = 'Erreur avec proc',
        @body_format = 'HTML',
        @append_query_error = 1,
        @profile_name = « Base de données profil de messagerie »;

     

TRANSACTION ROLLBACK    REVENIR   FIN

     

COMMIT TRANSACTION

Et j'obtenir le résultat que

  

Msg 50000, niveau 16, état 1, ligne 7
  Ceci est un test
  Courrier mis en attente.

Était-ce utile?

La solution

roulé en arrière il ne sortait jamais, mettre le code en dehors de la transaction électronique

Des livres en ligne

  

Lors de l'exécution de sp_send_dbmail   dans une transaction existante,   Base de données repose sur l'courrier utilisateur   soit engager ou à l'arrière du rouleau tout   changements. Il ne démarre pas une intérieure   transaction.

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

Autres conseils

Vous devez créer un point de sauvegarde, tentez votre opération, en cas d'annulation d'erreur au point de sauvegarde, envoyez le message puis valider. Semblable au modèle décrit dans Gestion des exceptions et les transactions imbriquées .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top