OVH Cloud OVH Cloud

xp_sendmail fichier délimité par ; pb colonnes

5 réponses
Avatar
Oliv'
Bonjour je reposte avec quelques précisions,

J'utilise xp_sendmail avec sql 2000 dans un trigger pour retourner des
enregistrements dans un fichier .csv par mail.
Cela fonctionne assez bien sauf que le fichier .csv généré comporte des
espaces entre les colonnes exemple :
**************************************************************************************
ref_client ;DATE ;ordre_gie;gie ;Intitule
;EvalReg ;EvalRec ;Rgt
;Rec
---------------;-----------------------;---------;----;--------------------------------------------------------------------------------------------------------------------------------;------------------------------;------------------------------;------------------------------;------------------------------
32905 ;2004-11-25 10:02:06.193; 4;DR ;Défense Recours
; .00; .00;
NULL; NULL
***************************************************************************************

COMMENT FAIRE pour supprimer ces espaces ???? En fait ils viennent compléter
les caractères pour totaliser la largeur de la colonne de données renvoyée.

Oliv'

Voici une partie du code :

SET ANSI_PADDING Off

declare @C1_CLIENT_EMAIL varchar(100),
@requete varchar(1000),
@requete1 varchar(1000),
@sujet varchar(100)

select @C1_CLIENT_EMAIL = SinC1_CLIENT_EMAIL from SI_Sinistres_4Roues where
SinC1_Sinistre_id = @sinistre_id

select @requete = 'select ref_client=SinC1_NUMERO_SINISTRE_CLIENT,
DATE=GETDATE(),ordre_gie=Singa_Ordre, gie=Singa_Garantie_id,
Intitule=Singa_Intitule, EvalReg=Singa_EvalReg, EvalRec=Singa_EvalRec,
Rgt=Singa_AffectReg, Rec=Singa_AffectRec FROM winpass.dbo.SI_Garanties,
winpass.dbo.SI_Sinistres, winpass.dbo.SI_Sinistres_4Roues WHERE
SI_Sinistres.Sin_Sinistre_id = SI_Sinistres_4Roues.SinC1_Sinistre_id AND
SI_Sinistres_4Roues.SinC1_Sinistre_id = SI_Garanties.Singa_Sinistre_id AND
SI_Sinistres.Sin_sinistre_id =' + CAST(@sinistre_id AS varchar(30)) + ' and
Singa_Ordre =' + CAST(@ordre as varchar(30)),
@sujet ='Provisions sinistre '+@refcourtier

mail:
EXEC master.dbo.xp_sendmail @recipients = @C1_CLIENT_EMAIL,
@query = @requete ,
@message = 'voir document joint',
@attachments ='provision.csv',
@subject = @sujet,
@attach_results= 'TRUE',@width = 20000,
@separator =';',
@no_header = true,
@ansi_attachment = true

5 réponses

Avatar
Oliv'
J'apporte de l'eau à mon moulin !!!
J'ai essayé de concaténer toutes mes colonnes pour n'en former qu'une avec
entre chaque colonne +';' et un rtrim.
Cependant les espaces sont toujours là mais uniquement à la fin de chaque
ligne.
Conséquences le fichier s'ouvre convenablement dans excel mais la taille de
ce fichier exemple fait 1 mo au lieu de 20 KO à cause des espaces...

Help !!!


"Oliv'" <(supprimerceci) a écrit dans le
message de news: 41b57dc4$0$4416$
Bonjour je reposte avec quelques précisions,

J'utilise xp_sendmail avec sql 2000 dans un trigger pour retourner des
enregistrements dans un fichier .csv par mail.
Cela fonctionne assez bien sauf que le fichier .csv généré comporte des
espaces entre les colonnes exemple :
**************************************************************************************
ref_client ;DATE ;ordre_gie;gie ;Intitule
;EvalReg ;EvalRec ;Rgt
;Rec
---------------;-----------------------;---------;----;--------------------------------------------------------------------------------------------------------------------------------;------------------------------;------------------------------;------------------------------;------------------------------
32905 ;2004-11-25 10:02:06.193; 4;DR ;Défense Recours
; .00; .00;
NULL; NULL
***************************************************************************************

COMMENT FAIRE pour supprimer ces espaces ???? En fait ils viennent compléter
les caractères pour totaliser la largeur de la colonne de données renvoyée.

Oliv'

Voici une partie du code :

SET ANSI_PADDING Off

declare @C1_CLIENT_EMAIL varchar(100),
@requete varchar(1000),
@requete1 varchar(1000),
@sujet varchar(100)

select @C1_CLIENT_EMAIL = SinC1_CLIENT_EMAIL from SI_Sinistres_4Roues where
SinC1_Sinistre_id = @sinistre_id

select @requete = 'select ref_client=SinC1_NUMERO_SINISTRE_CLIENT,
DATE=GETDATE(),ordre_gie=Singa_Ordre, gie=Singa_Garantie_id,
Intitule=Singa_Intitule, EvalReg=Singa_EvalReg, EvalRec=Singa_EvalRec,
Rgt=Singa_AffectReg, Rec=Singa_AffectRec FROM winpass.dbo.SI_Garanties,
winpass.dbo.SI_Sinistres, winpass.dbo.SI_Sinistres_4Roues WHERE
SI_Sinistres.Sin_Sinistre_id = SI_Sinistres_4Roues.SinC1_Sinistre_id AND
SI_Sinistres_4Roues.SinC1_Sinistre_id = SI_Garanties.Singa_Sinistre_id AND
SI_Sinistres.Sin_sinistre_id =' + CAST(@sinistre_id AS varchar(30)) + ' and
Singa_Ordre =' + CAST(@ordre as varchar(30)),
@sujet ='Provisions sinistre '+@refcourtier

mail:
EXEC master.dbo.xp_sendmail @recipients = @C1_CLIENT_EMAIL,
@query = @requete ,
@message = 'voir document joint',
@attachments ='provision.csv',
@subject = @sujet,
@attach_results= 'TRUE',@width = 20000,
@separator =';',
@no_header = true,
@ansi_attachment = true
Avatar
Pierre Goiffon
Oliv' wrote:
Bonjour je reposte avec quelques précisions,

J'utilise xp_sendmail avec sql 2000 dans un trigger pour retourner des
enregistrements dans un fichier .csv par mail.
Cela fonctionne assez bien sauf que le fichier .csv généré comporte des
espaces entre les colonnes exemple :



Pourquoi ne pas faire générer le CSV par les outils prévus pour ? BCP,
DTS, ...

Par curiosité, quel besoin pousse à générer un CSV sur un trigger ??
Avatar
Oliv'
Bonjour,
En fait je contrôle les reglements enregistrés sur notre base et envoi au
client un mail avec ses références et ces montants.

Pourquoi ? parce que je n'ai jamais encore utilisé ces outils bien que
j'utilise quotidiennement sql.
oliv'

"Pierre Goiffon" a écrit dans le message de news:
41b6cf2e$0$22720$
Oliv' wrote:
Bonjour je reposte avec quelques précisions,

J'utilise xp_sendmail avec sql 2000 dans un trigger pour retourner des
enregistrements dans un fichier .csv par mail.
Cela fonctionne assez bien sauf que le fichier .csv généré comporte des
espaces entre les colonnes exemple :



Pourquoi ne pas faire générer le CSV par les outils prévus pour ? BCP,
DTS, ...

Par curiosité, quel besoin pousse à générer un CSV sur un trigger ??
Avatar
Med Bouchenafa
Un trigger se déroule toujours dans la transaction qui l'a générée.
Tous les traitements que tu fais dans un trigger maintiennent donc cette transaction en cours.
Cela se traduit par des problèmes de verrous et de performance
Autant que possible; il faut éviter d'utiliser les triggers.
Sinon n'effectuer que des traitements très rapides


--
Bien cordialement
Med Bouchenafa

"Oliv'" <(supprimerceci) a écrit dans le message de news:
41b6d477$0$7495$
Bonjour,
En fait je contrôle les reglements enregistrés sur notre base et envoi au
client un mail avec ses références et ces montants.

Pourquoi ? parce que je n'ai jamais encore utilisé ces outils bien que
j'utilise quotidiennement sql.
oliv'

"Pierre Goiffon" a écrit dans le message de news:
41b6cf2e$0$22720$
Oliv' wrote:
> Bonjour je reposte avec quelques précisions,
>
> J'utilise xp_sendmail avec sql 2000 dans un trigger pour retourner des
> enregistrements dans un fichier .csv par mail.
> Cela fonctionne assez bien sauf que le fichier .csv généré comporte des
> espaces entre les colonnes exemple :

Pourquoi ne pas faire générer le CSV par les outils prévus pour ? BCP,
DTS, ...

Par curiosité, quel besoin pousse à générer un CSV sur un trigger ??




Avatar
Oliv'
Oui effectivement j'ai déjà eu des problèmes avec la procédure xp_sendmail
qui se bloquait et qui bloquait du coup des tables.
j'ai remplacé dans un de mes trigger le xp_sendmail par une Procédure à base
de cdosys car je n'avais pas de résultat de query à attacher au mail.

J'ai remplacé l'autre trigger par une procédure stockée que j'exécute 1 fois
par jour par une tache.
Mais j'ai toujours quelques difficultés à sortir un fichier .csv sans
espaces. (que je peux ouvrir avec excel sans traitement)

Quelqu'un sait t'il comment paramétrer osql pour faire cela ?

Oliv'



"Med Bouchenafa" a écrit dans le message de news:

Un trigger se déroule toujours dans la transaction qui l'a générée.
Tous les traitements que tu fais dans un trigger maintiennent donc cette
transaction en cours.
Cela se traduit par des problèmes de verrous et de performance
Autant que possible; il faut éviter d'utiliser les triggers.
Sinon n'effectuer que des traitements très rapides


--
Bien cordialement
Med Bouchenafa

"Oliv'" <(supprimerceci) a écrit dans le
message de news:
41b6d477$0$7495$
Bonjour,
En fait je contrôle les reglements enregistrés sur notre base et envoi au
client un mail avec ses références et ces montants.

Pourquoi ? parce que je n'ai jamais encore utilisé ces outils bien que
j'utilise quotidiennement sql.
oliv'

"Pierre Goiffon" a écrit dans le message de news:
41b6cf2e$0$22720$
Oliv' wrote:
> Bonjour je reposte avec quelques précisions,
>
> J'utilise xp_sendmail avec sql 2000 dans un trigger pour retourner des
> enregistrements dans un fichier .csv par mail.
> Cela fonctionne assez bien sauf que le fichier .csv généré comporte des
> espaces entre les colonnes exemple :

Pourquoi ne pas faire générer le CSV par les outils prévus pour ? BCP,
DTS, ...

Par curiosité, quel besoin pousse à générer un CSV sur un trigger ??