envoyer dbmail sur @@ erreur du serveur SQL 2005
-
26-09-2019 - |
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.
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.
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 .