0
votes

Comment envoyer un courrier électronique uniquement aux utilisateurs qui apparaissent dans les résultats de la requête?

Je crée une requête pour retourner des billets qui n'ont pas été mis à jour dans l'heure requise et envoient par courrier électronique. J'ai tout ce qui fonctionne, sauf que je veux envoyer un courrier électronique à envoyer par courrier électronique aux utilisateurs dont les noms apparaissent dans les résultats de la requête.

J'ai essayé de définir le nom de l'utilisateur @ sur l'ID utilisateur et l'ajout au courrier électronique ci-dessous. Pas sûr si cela est même proche. P>

Declare @username VARCHAR(MAX)
--("query")--
Set @username =[userid]--(in query results)--

exec msdb.dbo.sp_send_dbmail
@participants ='@username+@mydomain.com'


3 Réponses :


3
votes

Vous pouvez utiliser truc code> avec pour le chemin XML code> pour créer un ; code> Liste délimitée pour le paramètre @Recipients code> : XXX PRE>

ALORS: P>

EXEC msdb.dbo.sp_send_dbmail
     @recipients = @EmailList,
     @subject = 'foo',
     @body = 'bar',
     etc


1 commentaires

Stuff ne peut pas créer une liste délimitée. Dans votre requête, il s'agit de pour XML chemin business.



0
votes

Vous pouvez utiliser un curseur code> pour récupérer votre liste d'adresses e-mail et envoyer le courrier électronique à cette liste:

DECLARE @username AS VARCHAR(MAX) = ''
DECLARE @participants AS VARCHAR(MAX) = ''

DECLARE cursor_name CURSOR
FOR
SELECT userid
FROM YourTable

OPEN cursor_name;

FETCH NEXT
FROM cursor_name
INTO @username;

WHILE @@FETCH_STATUS = 0
BEGIN
    @participants += @username + '@mydomain.com;'

    FETCH NEXT FROM cursor_name
    INTO @username;
END

CLOSE cursor_name;
DEALLOCATE cursor_name;

EXEC msdb.dbo.sp_send_dbmail @recipients = @participants 
etc


2 commentaires

Je reçois une erreur "syntaxe incorrecte à proximité de @Participants"


Essayez d'initialiser les deux variables comme vide; Nom d'utilisateur = '' et participants = ''



0
votes

Vous pouvez utiliser Coallece pour créer une liste séparée par des points-virgules, ce qui veut que DBmail souhaite. xxx


2 commentaires

Merci c'est ce que je cherchais. J'utilise des jointures à partir de plusieurs tables pour faire ce travail de requête, j'ai essayé de mettre la requête dans une table Temp et de la définition ci-dessus de la lecture de cette table. Bien que cela fonctionne et envoie aux utilisateurs, il ne contient plus le reste des informations de la requête. Aucune suggestion?


Quelles autres informations essayez-vous d'inclure? Vous pouvez essayer d'expérimenter une deuxième variable qui utilise la même configuration que le nom d'utilisateur (at), mais serait (at) utilisateurs si vous voulez que ce soit de personnes dans votre requête. Si vous voulez que le corps du message soit différent pour chacun, cela devient plus compliqué. Cela nécessiterait des méthodes du curseur ou de devenir créatif avec le paramètre @query de DBmail. [link] ( docs.microsoft.com/en-us/sql/relational-databases/... )