|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité régulier
![]() |
Bonjour à tous
J'ai créé une procédure qui me permet d'exporter les données d'une table dans un fichier csv, à l'aide de la commande print, en désactivant la sortie avec 'SET NOCOUNT ON' de l'affectation du nombre de lignes, et en redirigeant la sortie de mon script vers un fichier. Tout fonctionnait parfaitement, jusqu'au moment où j'ai rajouté exec master..xp_fileexist, pour vérifier l'existence de mon fichier. Il me rajoute dans mon fichier '(1 ligne affect‚e)', alors qu'il ne le fait pas pour les autres instructions... Y'a t il une solution pour cela ? Merci d'avance pour votre aide. ---------------------------------------------- SQL SERVER 8.00.194 RTM Personal Edition EngineEdition 1 |
|
|
00
|
|
|
#2 |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 954 ![]() |
NON, car c'est dans la proc xp que cette ligne est renvoyée et à moins de la redévelopper en C...
Mais pourquoi utiliser la commande PRINT alors que vous avez la possibilité d'utiliser bcp.exe qui est fait pour faire des import/export ???? (en 1000 fois plus rapide) A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/ Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp. Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * * |
|
00
|
|
|
#3 |
|
Invité régulier
![]() |
Merci pour la réponse!
Effectivement, c'est logique, et donc incontournable... Je connais bcp et SSIS, mais la technique du print, me paraissait plus simple à mettre en oeuvre et efficace à la fois. Je ne souhaite pas exporter une table en fait. J'ai une table avec une dizaine de champs, sur laquelle je fais une lecture, et je produis mon csv à partir de cette lecture. Le csv résultant doit faire une quarantaine de champs, dont certains sont vides, et où les autres sont construits à partir des différentes données de ma table intermédiaire. Cela me convenait tout à fait jusqu'à l'utilisation de ce xp_fileexist... Bref.. je vais voir autrement.. Merci encore! |
|
|
00
|
|
|
#4 | |
|
Invité régulier
![]() |
Pour préciser un peu plus mon choix ... le fichier que je dois générer a un format spécial : voici à quoi doit ressembler mon fichier csv
Citation:
J'ai donc dans ma procédure qui commence par afficher la première ligne avec print, et ensuite un curseur qui boucle sur mes enregistrements, et qui produit chaque ligne à l'aide de deux print Avec bcp, j'ai plus de contraintes et ça reste tabulaire et formaté... |
|
|
|
00
|
|
|
#5 |
|
Membre Expert
![]() ![]() |
Peux-tu montrer ton script ?
|
|
00
|
|
|
#6 | ||
|
Invité régulier
![]() |
Code :
|
||
|
|
00
|
|
|
#7 |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 954 ![]() |
Faîtes ceci dans une table, temporaire globale d'une seule colonne de type VARCHAR(max), puis exportez cette table au format brut !
A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/ Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp. Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * * |
|
00
|
|
|
#8 |
![]() ![]() ![]() Nicolas SouquetAdministrateur de base de données Inscription : janvier 2005 Messages : 4 669 ![]() |
En outre le curseur est inutile ...
@++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes. Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012 |
|
00
|
|
|
#9 |
|
Invité régulier
![]() |
Merci pour vos conseils,
Bon finalement, ma méthode n'est pas si logique que ça à priori... Ok donc pour résumer, vous me conseillez de créer une table temporaire dans laquelle je mets mes données concaténées dans un seul champ. Et si mon curseur est inutile, pourquoi pas faire directement un select sur ma table, en concaténant les champs directement.. ? Merci encore pour votre aide |
|
|
00
|
|
|
#10 | |
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
Citation:
Un simple SELECT + update en bcp : je ne vois pas dans votre script ce qui vous empêche de faire ça en bcp. voire même, si l'ordre des couples de lignes n'a pas d'importance (ce dont je doute car vous mettez ORDER BY code ASC), vous pourriez faire un simple UPDATE / OUTPUT en bcp (reste à ajouter l’entête, ce que je ferais en batch...) |
|
|
|
00
|
|
|
#11 |
|
Invité régulier
![]() |
Merci pour ton message, mais je suis allé un peu vite en besogne...
En effet j'ai 2 lignes pour chaque enregistrement à générer... donc je suis effectivement obligé de passer d'abord par une table temporaire pour générer ces lignes, et ensuite de faire un select sur cette table temporaire... Mais par contre je ne vois pas comment me passer de mon curseur du coup.... car j'ai 2 lignes à créer pour chaque enregistrement de ma table... |
|
|
00
|
|
|
#12 | ||
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
cela n’empêche pas
Aux erreurs de copier coller près, je pense que cette commande passée a bcp remplace la totalité de la procédure stockée, sans curseur ni table temporaire... : Code SQL :
|
||
|
|
00
|
|
|
#13 | ||
|
Invité régulier
![]() |
Effectivement c'est pas bête
Du coup je me retrouve avec une simple requête.. pas mal Je vais mettre ça en oeuvre et je vous tiens au courant. @SQLpro Citation:
Citation:
|
||
|
|
00
|
|
|
#14 |
|
Invité régulier
![]() |
Bon juste pour terminer cette discussion qui a progressivement dérivé sur autre chose
J'ai finalement basculé sur l'utilisation de bcp, et supprimé mon curseur. Par contre j'ai conservé ma procédure stockée, pour avoir dans mon batch quelque chose de plus lisible. Le problème que je rencontrais dans mon message précédent (Erreur de séquence de fonction) a été résolu. En fait cela venait de l'utilisation de table temporaire dans bcp. Et aprés avoir parcouru plusieurs forums, j'ai finalement réussi à le faire fonctionner en ajoutant "set fmtonly off" dans l'entete de ma procédure. Merci encore à vous tous pour vos différentes solutions qui m'ont permis d'améliorer mon export, et d'enrichir un peu plus mes connaissances en Transact-SQL |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com