Accueil > > > SQL SERVER - PROCEDURE D'EDITION D'UN FICHIER PLAT (EXPORT CSV)
SQL SERVER - PROCEDURE D'EDITION D'UN FICHIER PLAT (EXPORT CSV)
Information sur la source
Description
I. Introduction Avec cette exemple trivial, mon intention est de mettre l'accent sur les possibilités offertes par la procédure xp_cmdshell (commandes DOS). En préalable à l'exécution de l'exemple, il vous faudra activer la commande shell dans la surface d'exposition (cf. fichier joint). Et, naturellement, il faut que le serveur SQL ait un droit d'accès pour l'emplacement spécifié. II. Caractères diacritiques A. Caractéres réservés Les caractères réservés ! ^ & % < > >> " | doivent être précédés par le caractère ^ pour ne pas être assimilés à une commande. La fonction SQL permet de gérer ceux-ci en les préfixant. B. Caractères de retour à la ligne Les caractères de retour à la ligne (#13 + #10) devront être supprimés ou remplacés par le caractère d'espacement. La fonction SQL assure également cette tâche. C. Caractères accentués Du fait de la redirection, les caractères accentués seront codés en MS-DOS (OEM). Il faudra donc les convertir sous WINDOWS (ANSI). Comme le montre la saisie d'écran, la méthode la plus simple consiste à utiliser le convertisseur du traitement de texte WORD. Si besoin, la macro en VBA ci-dessous vous permettra d'automatiser ce traitemenent sous WORD (voir variantes en commentaire). Sub OemToAnsi(sFilePath As String, sFileName As String) 'Emplacement du fichier ChangeFileOpenDirectory sFilePath 'Ouvrir le fichier en OEM, l'enregistrer en ANSI et le fermer Documents.Open FileName:=sFileName, Encoding:=850 With ActiveDocument .SaveAs FileName:=sFileName, Encoding:=1252 .Close End With End Sub
Source
- CREATE FUNCTION [dbo].[fctTranslateWordsDOS] (@EXP VARCHAR (8000))
- RETURNS VARCHAR (8000)
- AS
- -- Préfixe les huit caractères réservés de MS-DOS par l'accent circonflexe et
- -- supprime ou remplace les caractères de retour à la ligne par un espace.
- -- Exemples d'utilisation :
- -- 1. Mots réservés
- -- SELECT [dbo].[fctTranslateWordsDOS]('start ! " % & < > ^ | end')
- -- 2. Caractères de retour à la ligne
- -- SELECT [dbo].[fctTranslateWordsDOS](char(13) + char(10) + 'end')
- -- SELECT [dbo].[fctTranslateWordsDOS]('start' + char(13) + char(10) + 'end')
- -- SELECT [dbo].[fctTranslateWordsDOS]('start' + char(13) + char(10))
- BEGIN
- DECLARE @WORD VARCHAR(1), @RETVAL VARCHAR(8000)
- IF (@EXP IS NULL) RETURN NULL
- SET @RETVAL=''
- WHILE LEN(@EXP)>0
- BEGIN
- SET @WORD= SUBSTRING(@EXP,1, 1)
- -- Préfixe les mots réservés
- IF ((@WORD='!') OR (@WORD='"') OR (@WORD='%') OR (@WORD='&') OR (@WORD='<') OR (@WORD='>') OR (@WORD='^') OR (@WORD='|'))
- SET @RETVAL =@RETVAL + '^' + SUBSTRING(@EXP, 1, 1)
- -- Remplacement conditionnel avec gestion des bornes
- ELSE IF @WORD=CHAR(13) AND ISNULL(RIGHT(@RETVAL, 1), ' ')<>' ' AND @EXP<>CHAR(10)
- SET @RETVAL = @RETVAL + ' '
- -- Suppression des caractères de retour à la ligne
- ELSE IF ASCII(@WORD)<>13 AND ASCII(@WORD)<>10
- SET @RETVAL =@RETVAL + SUBSTRING(@EXP, 1, 1)
- SET @EXP= SUBSTRING(@EXP, 2, LEN(@EXP)-1)
- END -- END WHILE
- RETURN @RETVAL
- END -- END FCT
- GO
-
- CREATE PROCEDURE [dbo].[SPR_SHELL_EDIT] (@FullPath VARCHAR(260), @DelimitedText VARCHAR(7730), @isCleaned BIT) AS
- /* Edition d'un fichier plat (CSV) à partir d'une commande DOS -----------------
- -- Exemples d'utilisation :
- -- Edition sans suppression du contenu
- DECLARE @Emplacement VARCHAR (260)
- -- Emplacement du type \\serveur\partage\chemin\nom_fichier
- SET @Emplacement= '<chemin d'accès à saisir>\Test.csv'
- EXEC SPR_SHELL_EDIT @Emplacement, 'bijou;caillou;chou;genou;hibou;joujou;pou', 0
- -- Edition avec suppression du contenu
- EXEC SPR_SHELL_EDIT @Emplacement, 'bijou;caillou;chou;genou;hibou;joujou;pou', 1
- ------------------------------------------------------------------------------ */
- BEGIN
- DECLARE @Cmd VARCHAR(8000);
-
- IF @isCleaned=1
- -- Supprimer le contenu existant puis ajouter la ligne de texte
- SET @Cmd = 'Echo ' + [dbo].[fctTranslateWordsDOS](@DelimitedText) + ' > ' + @FullPath;
- ELSE
- -- Ajouter la ligne de texte sans supprimer le contenu existant
- SET @Cmd = 'Echo ' + [dbo].[fctTranslateWordsDOS](@DelimitedText) + ' >> ' + @FullPath;
-
- EXEC xp_cmdshell @Cmd, NO_OUTPUT;
- END
CREATE FUNCTION [dbo].[fctTranslateWordsDOS] (@EXP VARCHAR (8000))
RETURNS VARCHAR (8000)
AS
-- Préfixe les huit caractères réservés de MS-DOS par l'accent circonflexe et
-- supprime ou remplace les caractères de retour à la ligne par un espace.
-- Exemples d'utilisation :
-- 1. Mots réservés
-- SELECT [dbo].[fctTranslateWordsDOS]('start ! " % & < > ^ | end')
-- 2. Caractères de retour à la ligne
-- SELECT [dbo].[fctTranslateWordsDOS](char(13) + char(10) + 'end')
-- SELECT [dbo].[fctTranslateWordsDOS]('start' + char(13) + char(10) + 'end')
-- SELECT [dbo].[fctTranslateWordsDOS]('start' + char(13) + char(10))
BEGIN
DECLARE @WORD VARCHAR(1), @RETVAL VARCHAR(8000)
IF (@EXP IS NULL) RETURN NULL
SET @RETVAL=''
WHILE LEN(@EXP)>0
BEGIN
SET @WORD= SUBSTRING(@EXP,1, 1)
-- Préfixe les mots réservés
IF ((@WORD='!') OR (@WORD='"') OR (@WORD='%') OR (@WORD='&') OR (@WORD='<') OR (@WORD='>') OR (@WORD='^') OR (@WORD='|'))
SET @RETVAL =@RETVAL + '^' + SUBSTRING(@EXP, 1, 1)
-- Remplacement conditionnel avec gestion des bornes
ELSE IF @WORD=CHAR(13) AND ISNULL(RIGHT(@RETVAL, 1), ' ')<>' ' AND @EXP<>CHAR(10)
SET @RETVAL = @RETVAL + ' '
-- Suppression des caractères de retour à la ligne
ELSE IF ASCII(@WORD)<>13 AND ASCII(@WORD)<>10
SET @RETVAL =@RETVAL + SUBSTRING(@EXP, 1, 1)
SET @EXP= SUBSTRING(@EXP, 2, LEN(@EXP)-1)
END -- END WHILE
RETURN @RETVAL
END -- END FCT
GO
CREATE PROCEDURE [dbo].[SPR_SHELL_EDIT] (@FullPath VARCHAR(260), @DelimitedText VARCHAR(7730), @isCleaned BIT) AS
/* Edition d'un fichier plat (CSV) à partir d'une commande DOS -----------------
-- Exemples d'utilisation :
-- Edition sans suppression du contenu
DECLARE @Emplacement VARCHAR (260)
-- Emplacement du type \\serveur\partage\chemin\nom_fichier
SET @Emplacement= '<chemin d'accès à saisir>\Test.csv'
EXEC SPR_SHELL_EDIT @Emplacement, 'bijou;caillou;chou;genou;hibou;joujou;pou', 0
-- Edition avec suppression du contenu
EXEC SPR_SHELL_EDIT @Emplacement, 'bijou;caillou;chou;genou;hibou;joujou;pou', 1
------------------------------------------------------------------------------ */
BEGIN
DECLARE @Cmd VARCHAR(8000);
IF @isCleaned=1
-- Supprimer le contenu existant puis ajouter la ligne de texte
SET @Cmd = 'Echo ' + [dbo].[fctTranslateWordsDOS](@DelimitedText) + ' > ' + @FullPath;
ELSE
-- Ajouter la ligne de texte sans supprimer le contenu existant
SET @Cmd = 'Echo ' + [dbo].[fctTranslateWordsDOS](@DelimitedText) + ' >> ' + @FullPath;
EXEC xp_cmdshell @Cmd, NO_OUTPUT;
END
Conclusion
Voir l'exemple concret en pièce jointe sur la base AdventureWorks. L'argument NO_OUTPUT est facultatif. Supprimez le pour afficher un message d'erreur éventuel du genre « Accès refusé ».
Historique
- 22 novembre 2007 14:22:49 :
- Exemple d'utilisation en commentaire dans le code source
- 22 novembre 2007 14:30:55 :
- Ajout conclusion
- 22 novembre 2007 14:53:36 :
- Explication complémentaire (argument NO_OUTPUT)
- 22 novembre 2007 15:31:01 :
- Mots clés
- 26 novembre 2007 11:04:35 :
- Titre complété
- 30 novembre 2007 16:49:36 :
- Exemple concret sur la base AdventureWorks
- 30 novembre 2007 17:41:31 :
- faute de frappe (orthographe)
- 04 décembre 2007 17:06:44 :
- Ajout de la fct REPLACE dans l'exemple en pièce jointe
- 18 décembre 2007 11:16:36 :
- Codage des caractères accentés
- 19 décembre 2007 10:43:57 :
- Caractères réservés.
- 19 décembre 2007 15:56:18 :
- Liste des mots réservés
- 19 décembre 2007 17:25:39 :
- Ajout d'une fonction pour gérer les caractères réservés de MS-DOS
- 19 décembre 2007 17:42:44 :
- Réorganisation de la source
- 21 décembre 2007 10:23:16 :
- Optimisation de la fct d'ajout de l'accent circonflexe pour éditer les mots réservés de MS-DOS
- 26 décembre 2007 10:39:43 :
- Explication complétée
- 26 décembre 2007 15:18:01 :
- Ajout du code de la macro dans l'explication
- 26 décembre 2007 15:21:05 :
- Présentation
- 26 décembre 2007 15:39:05 :
- Faute de frappe
- 26 décembre 2007 15:40:31 :
- Faute de frappe
- 26 décembre 2007 15:41:59 :
- Faute de frappe
- 26 décembre 2007 15:43:26 :
- Faute de frappe
- 26 décembre 2007 17:49:25 :
- Mise en page
- 26 décembre 2007 17:49:58 :
- Mise en page
- 26 décembre 2007 17:51:00 :
- Mise en page
- 27 décembre 2007 10:55:44 :
- Faute de frappe
- 03 janvier 2008 11:46:36 :
- MAJ de la fonction : ajout de la suppression ou du remplacement des caractères de retour à la ligne.
- 03 janvier 2008 12:05:29 :
- Commentaire
- 03 janvier 2008 12:10:53 :
- Faute de frappe
- 04 janvier 2008 16:06:48 :
- Faute de frappe (orthographe)
- 04 janvier 2008 16:15:58 :
- idem
- 04 janvier 2008 16:18:53 :
- mise en page
- 07 janvier 2008 09:38:57 :
- PRésentation
- 23 décembre 2008 12:14:10 :
- Artefact d'enregistrement (guillemet)
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Import fichier CSV dans Oracle 9i sous Linux RHEL3 [ par Lucinda000 ]
Bonjour à tous,Voilà. J'aimerai importer des fichiers csv sous Oracle 9i qui a déjà une base de données.J'ai bien compris que je devais utiliser sqlld
fichier plat sql [ par jshinobi ]
Bonjourcomment mettre les données d'un fichier log dans une base de données sql oracle toute en respectant les champs du log?
Création de fichier plat à partir des bases ORACLE [ par jvelo ]
Bonjour,En fait, je fais une recherche d'information sur des bases différentes (ORACLE 10g). Mais, ces bases contiennent des tables identiques représe
Export XML via BCP SQL server 2005 [ par bambou92 ]
Bonjour,Je souhaiterai avoir une solution concernant mon problème d'export en format XML.J'ai créé une procédure stockée qui crée le fichier XML via f
Migration de données d'un fichier plat vers une base de données SQL en utilisant SSIS [ par OmarEK ]
Bonjour,J'ai des données dans un fichier plat ".txt" que je voudrais migrer vers une table de base de données SQL en utilisant SSIS, en comparant les
LOAD DATA LOCAL INFILE insert que certaines colonnes [ par ericsandrine ]
bonjour j'ai un fichier csv avec 10 colonnes et ma table n'a que 3 colonnes peut on faire un LOAD DATA LOCAL INFILE en ne récupérant que certaines
Génerer un fichier CSV en SQL SERVER 2000. [ par mdab ]
mdab Bonjour, J'ai besion de génerer un fichier csv en sql server 2000. Est ce qu'il ya une fonction qui permet de retourner ce resultat.(l'equivant
Validation de fichier csv dans un DTS [ par samoht ]
Bonjour,J'ai un DTS sur sql2005 qui importe les données d'un fichier CSV stocké sur le lecteur D du serveur. Jusqu'ici, l'importation se passe correct
Créer un fichier Plat avec SSIS 2005 sur un autre serveur [ par PleaseHELP ]
Bonjour, Je souhaiterais créer un fichier plat sur un autre serveur que celui sur lequel SSIS 2005 est installé. Quelqu'un aurait-il une idée? Merci
SSIS Erreur : « ResultSet » non définie correctement [ par Khelldran ]
Bonjour, Je suis actuellement stagiaire dans une entreprise informatique, je suis amené à utiliser SSIS. Mon erreur arrive lors de l'execution d'une
|
Derniers Blogs
CSS CONTENT STATE SELECTORS (PERSONNAL DRAFT)CSS CONTENT STATE SELECTORS (PERSONNAL DRAFT) par FREMYCOMPANY
Bonjour à tous, Je viens de publier une proposition comprenant 5 pseudo-classes pour le CSS Working Group ayant trait à l'état de chargement d'un élément (ex: IMG,VIDEO,AUDIO,OBJECT pour l'HTML.). Si le c½ur vous en dit, vous pouvez retrouver cette p...
Cliquez pour lire la suite de l'article par FREMYCOMPANY MBA : POURQUOI FAIRE ET COMMENT LE CHOISIR ?MBA : POURQUOI FAIRE ET COMMENT LE CHOISIR ? par ROMELARD Fabrice
Formation initiale Durant la formation, le découpage classique est le suivant (je donnerai les équivalences Suisse lorsque je les connaîtrais) : Ecole primaire jusqu'au Collège : Formation générale permettant d'obtenir les méthodes...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice Y'A DES ERREURS QUI PEUVENT RENDRE LE DéVELOPPEUR VIOLENTY'A DES ERREURS QUI PEUVENT RENDRE LE DéVELOPPEUR VIOLENT par Aleks
Quand on a ce genre d'erreur sans log :
Et bas on a juste envie de choper le gas de Microsoft qu'a développé ça et lui foutre des baffes de Coboye ! ...
Cliquez pour lire la suite de l'article par Aleks [HYPER-V 3] PRéSENTATION DES COMMANDLETS POWERSHELL[HYPER-V 3] PRéSENTATION DES COMMANDLETS POWERSHELL par Pierrick CATRO-BROUILLET
Avec la sortie prochaine de la Beta Consumer Preview de Windows 8, j'avais envie de revenir sur une des fonctionnalités que j'attends le plus et que, en bon geek que je suis, j'utilise déjà : Hyper-V 3 ainsi son module PowerShell.
Il y a déjà pléthor...
Cliquez pour lire la suite de l'article par Pierrick CATRO-BROUILLET IIS7 - COMPRESSION GZIPIIS7 - COMPRESSION GZIP par cyril
La compression GZIP permet d'améliorer les performances de navigation en compressant ce qu'envoie le serveur à un client. Pour comprendre comment cela fonctionne, regardons ce qu'il se passe au niveau HTTP lorsqu'un client tente d'accéder à une ress...
Cliquez pour lire la suite de l'article par cyril
Logiciels
Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning Academy System (17.1.3.0)ACADEMY SYSTEM (17.1.3.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|