IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MS SQL Server Discussion :

utilisation de fetch avec select


Sujet :

MS SQL Server

  1. #1
    Membre à l'essai
    Inscrit en
    avril 2002
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : avril 2002
    Messages : 26
    Points : 14
    Points
    14
    Par défaut [résolu] utilisation de fetch avec select
    Bonjour,

    je souhaite créer un déclencheur et envoyer un mail d'avertissement aux utilisateurs enregistrés.
    La création du déclencheur ne pose pas de problèmes.
    J'ai une table qui contient tous les utilisateurs avec leur adresse mail.
    Dans le déclencheur, il y a une requête qui sélectionne les utlisateurs suivant un critère de région. La sélection s'effectue sans difficultés.

    Par contre, je souhaite faire une concaténation de tous les adresses mails pour éviter d'envoyer plusieurs le même message. C'est dans la concaténation que ça plante et je vois pas comment faire.

    Voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    CREATE TRIGGER nvperso
    ON PERSONNE
    FOR UPDATE
    AS
    	Declare @Nom nvarchar(50), @Prenom nvarchar(50), @msg nvarchar(50), @EmailT varchar(50), @EmailReg varchar(300)
       Select @Nom = NomPersonne from inserted
       Select @Prenom = PrenomPersonne from inserted
       Set @msg = @Nom +' ' +@Prenom + ' a été modifié'
     
       DECLARE Email_cursor CURSOR FOR
       Select Email from Utilisateurs inner join Communes on Utilisateurs.Region = Communes.Region
    	inner join inserted on Communes.IdCommune = inserted.IdCommuPersonne
       OPEN Email_cursor
       FETCH NEXT FROM Email_cursor INTO @EmailT
       WHILE @@FETCH_STATUS = 0
            BEGIN
    	set @EmailReg = @EmailReg + @EmailT + ';'  --cette ligne ne marche pas
       	FETCH NEXT FROM Email_cursor INTO @EmailT
           END
       CLOSE Email_cursor
       DEALLOCATE Email_cursor
     
       EXEC master..xp_sendmail @recipients = 'toto@toto.fr',
          @message = @EmailT,
          @subject = @msg
    Dans le message, j'ai rien du tout. En testant dans l'analyseur de requêtes, c'est au niveau du set @EmailReg = ... que ça marche pas. Toutes les autres instructions sont executées.

    Est ce quelqu'un a une idée ?

    Merci !
    "O étoiles qui dans l'année sans soleil
    Par sa lumineuse main fûtes semées,
    Dans les champs venteux maintenant brillante et claire
    Nous voyons votre floraison d'argent essaimée !"
    Le Seigneur des anneaux

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    octobre 2002
    Messages
    956
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : octobre 2002
    Messages : 956
    Points : 1 178
    Points
    1 178
    Par défaut
    Bonjour,
    Est-ce que tu n'aurais pas plus de 6 destinataires (emails)?
    Car pour 6 emails cela te fait au maximum, 6*(50+1)=306 caractères ce qui dépasse la capacité de ta variable @EmailReg qui est de 300.
    le +1 vient du ';'

    Par ailleurs, je crois que ton trigger ne marcherait pas si tu mettais à jour plusieurs enregistrements de la table Personne en même temps.
    A+
    Soazig

  3. #3
    Membre à l'essai
    Inscrit en
    avril 2002
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : avril 2002
    Messages : 26
    Points : 14
    Points
    14
    Par défaut
    Merci !

    Le trigger ne marche pas s'il y a plusieurs mises à jour dans la base de données en même temps ? A quoi c'est dû ?

    Comment je pourrais faire alors pour envoyer un message d'alerte à certaines personnes lors de mises à jour dans la base de données ?
    "O étoiles qui dans l'année sans soleil
    Par sa lumineuse main fûtes semées,
    Dans les champs venteux maintenant brillante et claire
    Nous voyons votre floraison d'argent essaimée !"
    Le Seigneur des anneaux

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    octobre 2002
    Messages
    956
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : octobre 2002
    Messages : 956
    Points : 1 178
    Points
    1 178
    Par défaut
    Bonjour,

    Je n'ai jamais créé de trigger, mais si j'ai compris la théorie lorsque tu mets à jour plusieurs enregistrements, tu obtiens plusieurs enregistrements dans la table inserted. comme ton
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Select @Nom = NomPersonne from inserted
    présuppose qu'il n'y a qu'un enregistrement dans inserted, tu auras peut-être un problème.

    Est-ce que ton problème venait ou non de la taille de la variable @EmailReg ?

    A+
    Soazig

  5. #5
    Membre à l'essai
    Inscrit en
    avril 2002
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : avril 2002
    Messages : 26
    Points : 14
    Points
    14
    Par défaut
    Ouf !

    en fait, le problème c'est que j'avais des champs nuls de temps en temps dans la variable @EmailT (Les champs ne sont pas toujours remplis).
    Et j'ai découvert que le null est absorbant !! donc voilà pourquoi @EmailReg était vide.

    En faisant un test sur @EmailT pour vérifier s'il y a une valeur, ça fonctionne !

    Merci pour les suggestions !
    "O étoiles qui dans l'année sans soleil
    Par sa lumineuse main fûtes semées,
    Dans les champs venteux maintenant brillante et claire
    Nous voyons votre floraison d'argent essaimée !"
    Le Seigneur des anneaux

  6. #6
    En attente de confirmation mail
    Inscrit en
    novembre 2002
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : novembre 2002
    Messages : 51
    Points : 58
    Points
    58
    Par défaut
    Citation Envoyé par arwen
    Ouf !

    en fait, le problème c'est que j'avais des champs nuls de temps en temps dans la variable @EmailT (Les champs ne sont pas toujours remplis).
    Et j'ai découvert que le null est absorbant !! donc voilà pourquoi @EmailReg était vide.

    En faisant un test sur @EmailT pour vérifier s'il y a une valeur, ça fonctionne !

    Merci pour les suggestions !
    Mais ça je te l'avais signalé dans un autre post de ta part il me semble, ça t'aurait permis de gagner du temps.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 15
    Dernier message: 26/11/2014, 15h30
  2. Réponses: 2
    Dernier message: 04/09/2009, 17h40
  3. Utilisation de g_list_foreach avec une selection graphique
    Par hubux dans le forum GTK+ avec C & C++
    Réponses: 2
    Dernier message: 23/04/2007, 16h27
  4. utilisation de dll avec diverses compilateurs
    Par Thylia dans le forum C++
    Réponses: 30
    Dernier message: 21/10/2004, 17h30
  5. Utiliser Borland C++ avec Emacs sous Windows
    Par Eikichi dans le forum Autres éditeurs
    Réponses: 2
    Dernier message: 02/03/2003, 09h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo