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

Développement SQL Server Discussion :

Tranférer des données par email avec selection des destinataires


Sujet :

Développement SQL Server

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Juillet 2010
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Tranférer des données par email avec selection des destinataires
    Bonjour j'aimerais envoyer par émail une sélection d'enregistrements mais à des destinataires différents suivant les enregistrements :
    Je voudrais envoyer par émail à mes commerciaux les installations qui sont en fin de garantie et qui n'ont pas de contrats d'entretien
    Donc j'ai écris ceci le SELECT extrait 11 enregistrements mais bien sur le mail envoyé ne part qu'au dernier enregistrement de ma liste comment l'envoyé à chaque commercial, il faut faire une boucle mais je sèche et ne trouve pas d'exemple

    Merci d'avance

    Mon 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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    /* Déclaration des variables*/
    DECLARE @Courriel nvarchar(60),@NCLIENT nvarchar(8),@NCHANTIER nvarchar(8),   /* Déclaration des variables*/
            @PRENOMV nvarchar(50), @NOMCLIENT nvarchar(50),@SYSTEM nvarchar(50),@DATEFIN nvarchar(15),
            @DDINTERV nvarchar(15),@DMSERVICE nvarchar(15),@avec nvarchar(50),@titre nvarchar(12),
            @NOMCONTACT nvarchar(50),@PRENONCONTACT  nvarchar(50),@MAILCONTACT nvarchar(200),
            @TELCONTACT nvarchar(12),@MOBCONTACT nvarchar(12),@adresse1 nvarchar(40),
            @adresse2 nvarchar(40),@ville nvarchar(40),@cp nvarchar(5),@LETEXTE nvarchar(max)
     
       /* Requete délection des donnees dans mes tables et affectation à mes variables*/
       /* je retrouve 11 lignes sur 5000 enregistrements */      
     
    SELECT   @NCLIENT = FTNCLI  , @Courriel = COM_MAIL , @NCHANTIER = FTCCHA ,
             @PRENOMV = COM_PRENOM , @NOMCLIENT = CLNMFA , @SYSTEM = FTSYST ,
             @DATEFIN = CONVERT(VARCHAR(12),FTDFGA, 106) , @DDINTERV = CONVERT(VARCHAR(12),FTDDIN, 106) ,
             @DMSERVICE = CONVERT(VARCHAR(12),FTDMES, 106),@avec = dbo.INITCAP(FPLIBEMP),
             @titre = CNTITR , @NOMCONTACT = dbo.INITCAP (CNNOMC) , @PRENONCONTACT = dbo.INITCAP (CNPREN), /* dbo.INITCAP c'est une fonction de traitement */
             @MAILCONTACT = CNMAIL , @TELCONTACT =  CNNTELF , @MOBCONTACT = CNNTELP ,                      /* des majuscules minuscules */ 
             @adresse1 = CLADF1 , @adresse2 = CLADF2 , @ville = CLVILFA , @cp = CLCPFA            
     
            FROM  WIPSOS_TFC.W_TO.PFICTEC /* table fiche technique*/
                  INNER JOIN WIPSOS_TFC.W_TO.PCHANT ON CHCDEV = FTCCHA /* table des installations */ 
                  INNER JOIN WIPSOS_TFC.W_TO.PCOMMERC ON CHCREP = COM_CODE /* table des commerciaux*/
                  INNER JOIN WIPSOS_TFC.W_TO.PFICPER ON FTNEMP = FPEMP /* table des techniciens */
                  INNER JOIN   WIPSOS_TFC.W_TO.PCLIENT ON FTNCLI = CLNCLI /* table des clients */
                  INNER JOIN  WIPSOS_TFC.W_TO.PCNTCCLI ON CLNCLI = CNNCLI AND CNLISA = 1 /* table des contacts clients */
            and dateDiff( dd ,getdate(),FTDFGA)> 0  
            and dateDiff( dd ,getdate(),FTDFGA)< 60
            and FTTYPF NOT IN ('13','18','19','27','28') /* différents critères pour une sélection de données plus fine*/
            and FTNCON = 0 and FTDFGA <> FTDMES          /* comme date de fin de garantie dans 60 jours */
            ORDER BY FTDFGA
     
       /* Envoil de l'email seul le dernier enregistrement est transmis */
       /* Comment faire une boucle sur les 11 lignes plus haut */
     
    SET  @LETEXTE = +'<strong>' + 'Bonjour ' + @PRENOMV +  '<br/>' + '</strong>'
                    + 'L' +'''installation ' + @SYSTEM +  ' de ton Client ' +'<strong>'+ @NOMCLIENT + '</strong>'  +  '<br/>' 
                    + ' N° : ' + @NCLIENT
                    + ' pour le chantier N° : ' + @NCHANTIER +' arrive en fin de garantie le : ' + @DATEFIN +  '<br/>' 
                    + 'Date de mise en service le : '+ @DMSERVICE + '<br/>'+  '<br/>'
                    + ' Cette installation n'+'''ayant pas de contrat d'+'''entretien, tu devrais appeler ton client pour lui faire une proposition.' 
                    +  '<br/>' + ' Ci-dessous les coordonnés du contact principal si renseignées bien sur et l' 
                    + '''adresse de ton Client.' +  '<br/>' +  '<br/>' 
                    + @titre + ' ' + @NOMCONTACT +' ' + @PRENONCONTACT +  '<br/>'+ 'Téléphone Fixe : ' 
                    + @TELCONTACT +  '<br/>'+ 'Mobile : ' + @MOBCONTACT +  '<br/>'+'Courriel : ' + @MAILCONTACT +  '<br/>'
                    + @adresse1 + '<br/>' + @adresse2 + '<br/>'
                    + @cp + ' ' + @ville + '<br/>' + '<br/>'
                    + '<strong>' + 'Salutations '+  '<br/>' + 'Le Service Informatique de la TFC' + '</strong>'+  '<br/>'
                    + + '<big>' + 'Site : <a href="http://www.toto.fr" target="_blank">http://www.toto.fr</a>' + '/<big>'
     
    EXEC msdb.dbo.sp_send_dbmail /* commande sql 2008 pour envoyer un email depuis la console */
        @profile_name = 'JMS', /* profil outlook*/
        @recipients = @courriel, /* adresse email du destinataire */
        @body_format= 'HTML', /* format HTML afin d'assurer un minimum de mise en forme */
        @subject=  'Installations sans contrat et en fin de garantie dans les 30 jours à venir ',
        @body =  @LETEXTE /* le corps du message */

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 888
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 888
    Points : 53 121
    Points
    53 121
    Billets dans le blog
    6
    Par défaut
    Le mieux serait de créer une table d'envoi avec les colonnes suivantes :
    - clef de la table contenant les données à envoyer (ou bien message)
    - clef du commercial
    - date d'envoi
    Puis de boucler dessus par curseur et alimenter la date d'envoi après l'envoi du mail.

    A +

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Juillet 2010
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    je pensais le faire dans un deuxième temps car je vais avoir besoin de savoir si j'ai déjà envoyé en email et donc bouclage par curseur
    Merci je vais donc cherché comment cela fonctionne le bouclage par curseur
    Si quelqu'un à un petit exemple je suis preneur
    Merci déjà pour cette première réponse

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 888
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 888
    Points : 53 121
    Points
    53 121
    Billets dans le blog
    6
    Par défaut
    a lire : http://sqlpro.developpez.com/cours/s...nsactsql/#L4.7
    Et utilisez
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    UPDATE MaTable
    SET MacolonneDateHeure = GETDATE()
    WHERE CURRENT OF MyCurseur
    Pour mettre à jour la ligne courante du curseur.

    A +

  5. #5
    Nouveau Candidat au Club
    Inscrit en
    Juillet 2010
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 3
    Points : 1
    Points
    1
    Par défaut RESOLU
    OK Merci j'ai compris pour le curseur
    et donc voici ma petite routine qui envoi automatiquement des mails à mes commerciaux pour leur signaler les fin de garantie? Je dois encore améliorer car si ma routine est journalière il faut que je sache si j'ai déjà envoyé un mail
    mais je vais y arriver je pense passer par un fichier intermédiaire cela me fera un journal d'envoi de mail en plus. Merci pour le coup de pouce
    Code SQL : 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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
     
    /* Déclaration des variables*/
    DECLARE @Courriel nvarchar(60),@NCLIENT nvarchar(8),@NCHANTIER nvarchar(8),   /* Déclaration des variables*/
            @PRENOMV nvarchar(50), @NOMCLIENT nvarchar(50),@SYSTEM nvarchar(50),@DATEFIN nvarchar(15),
            @DDINTERV nvarchar(15),@DMSERVICE nvarchar(15),@avec nvarchar(50),@titre nvarchar(12),
            @NOMCONTACT nvarchar(50),@PRENONCONTACT  nvarchar(50),@MAILCONTACT nvarchar(200),
            @TELCONTACT nvarchar(12),@MOBCONTACT nvarchar(12),@adresse1 nvarchar(40),
            @adresse2 nvarchar(40),@ville nvarchar(40),@cp nvarchar(5),@LETEXTE nvarchar(max)
     
    DECLARE Email_Cursor CURSOR FOR  -- déclaration du'un curseur --
     
    SELECT   FTNCLI ,COM_MAIL , FTCCHA ,
             COM_PRENOM , CLNMFA , FTSYST ,
             CONVERT(VARCHAR(12),FTDFGA, 106) AS 'D.F.Garantie' ,CONVERT(VARCHAR(12),FTDDIN, 106) AS 'D.D.Interv',
             CONVERT(VARCHAR(12),FTDMES, 106) AS 'D.M.Service',dbo.INITCAP(FPLIBEMP)AS avec, -- INITCAP routine 1èr lettre en majuscule --
             CNTITR , dbo.INITCAP (CNNOMC) AS NOM ,                                          -- fonctionne avec les prénoms composés --   
             CASE 
             WHEN dbo.INITCAP (CNPREN) IS NULL THEN ' ' -- si le prénom est null j'ai le corps du message qui se trouve vide --
                 ELSE dbo.INITCAP (CNPREN)              -- d'ou cette astuce pour remplacer les null par un blanc --   
             END AS PRENOM,  
             CNMAIL , CNNTELF , CNNTELP ,                      
             CLADF1 , CLADF2 , CLVILFA , CLCPFA
     
            FROM  WIPSOS_TFC.W_TO.PFICTEC /* table fiche technique*/
                  INNER JOIN WIPSOS_TFC.W_TO.PCHANT ON CHCDEV = FTCCHA /* table des installations */ 
                  INNER JOIN WIPSOS_TFC.W_TO.PCOMMERC ON CHCREP = COM_CODE /* table des commerciaux*/
                  INNER JOIN WIPSOS_TFC.W_TO.PFICPER ON FTNEMP = FPEMP /* table des techniciens */
                  INNER JOIN WIPSOS_TFC.W_TO.PCLIENT ON FTNCLI = CLNCLI /* table des clients */
                  INNER JOIN WIPSOS_TFC.W_TO.PCNTCCLI ON CLNCLI = CNNCLI AND CNLISA = 1 /* table des contacts clients */
            and dateDiff( dd ,getdate(),FTDFGA)> 0 -- supérieur à la date du jour --   
            and dateDiff( dd ,getdate(),FTDFGA)< 30 -- tous les chantiers en fin de garantie dans les 30 jours à venir --
            and FTTYPF NOT IN ('13','18','19','27','28') /* différents critères pour une sélection de données plus fine*/
            and FTNCON = 0 and FTDFGA <> FTDMES
            ORDER BY COM_MAIL,FTCCHA
     
    OPEN Email_Cursor -- ouverture du curtseur --
     
    FETCH NEXT FROM Email_Cursor -- premier enregistrement
     
    WHILE @@FETCH_STATUS = 0  -- initialisatioon de la boucle --
    BEGIN
        FETCH NEXT FROM Email_Cursor
         INTO @NCLIENT, @Courriel , @NCHANTIER ,@PRENOMV, @NOMCLIENT,@SYSTEM,@DATEFIN,
            @DDINTERV, @DMSERVICE , @avec , @titre ,@NOMCONTACT , @PRENONCONTACT , @MAILCONTACT ,
            @TELCONTACT , @MOBCONTACT , @adresse1 ,
            @adresse2 ,@ville ,@cp  -- init des variables car dans l'envoi de mail impossible d'utiliser les champs en direct --
     
        SET  @LETEXTE = +'<strong>' + 'Bonjour ' + @PRENOMV +  '<br/>' + '</strong>'
                    + 'L' +'''installation ' + @SYSTEM +  ' de ton Client ' +'<strong>'+ @NOMCLIENT + '</strong>'  +  '<br/>' 
                    + ' N° : ' + @NCLIENT
                    + ' pour le chantier N° : ' + @NCHANTIER +' arrive en fin de garantie le : ' + @DATEFIN +  '<br/>' 
                    + 'Date de mise en service le : '+ @DMSERVICE + '<br/>'+  '<br/>'
                    + ' Cette installation n'+'''ayant pas de contrat d'+'''entretien, tu devrais appeler ton client pour lui faire une proposition.' 
                    +  '<br/>' + ' Ci-dessous les coordonnés du contact principal si renseignées bien sur et l' 
                    + '''adresse de ton Client.' +  '<br/>' +  '<br/>' 
                    + @titre + ' ' + @NOMCONTACT +' ' + @PRENONCONTACT +  '<br/>'+ 'Téléphone Fixe : ' 
                    + @TELCONTACT +  '<br/>'+ 'Mobile : ' + @MOBCONTACT +  '<br/>'+'Courriel : ' + @MAILCONTACT +  '<br/>'
                    + @adresse1 + '<br/>' + @adresse2 + '<br/>'
                    + @cp + ' ' + @ville + '<br/>' + '<br/>'
                    + '<strong>' + 'Salutations '+  '<br/>' + 'Le Service Informatique de la TFC' + '</strong>'+  '<br/>'
                    + + '<big>' + 'Site : http://www.tfc.fr' + '/<big>'+  '<br/>'
                    + 'Extraction automatique à partir de la nouvelle Base WIPSOS SQL' -- mise en forme du corps du message --
     
        EXEC msdb.dbo.sp_send_dbmail -- commande sql 2008 pour envoyer un email depuis la console */
        @profile_name = 'JMS', -- profil outlook */
        @recipients = @Courriel , -- adresse email du destinataire qui est le commercial du chantier en fin de garantie --
        @body_format= 'HTML', -- format HTML afin d'assurer un minimum de mise en forme */
        @subject=  'Installations sans contrat et en fin de garantie dans les 30 jours à venir ',
        @body =  @LETEXTE /* le corps du message */
    END;
     
    CLOSE Email_Cursor;
    DEALLOCATE Email_Cursor

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 24/05/2015, 23h12
  2. Requête select des données avec un critère de date
    Par funboard dans le forum Oracle
    Réponses: 2
    Dernier message: 21/04/2008, 16h52
  3. selection des données par intervalle
    Par abdou.sahraoui dans le forum Oracle
    Réponses: 3
    Dernier message: 18/08/2006, 10h12
  4. envoyer des données par l'intermédiaire d'un bouton
    Par mathilde50 dans le forum Access
    Réponses: 26
    Dernier message: 28/10/2004, 16h49

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