|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Pascal AdamInscription : avril 2011 Messages : 5 ![]() |
* Bonjour, *
Avec l'instruction suivante : Code :
INSERT INTO testblob SELECT 'TestOrders',BulkColumn FROM OPENROWSET(Bulk 'C:\orders.xml', SINGLE_BLOB) AS BLOB Quelle est l'instruction qui permet de réaliser l'opération inverse ? Je dois au départ d'une table générer plusieurs fichiers XML, ils sont dans des champs de type BLOB de cette table. Il semble qu'il est possible d'y arriver avec la commande BCP (http://msdn.microsoft.com/fr-fr/libr...2(SQL.90).aspx) mais tous mes essais sont des échecs. Quelqu'un a-t-il une doc complète à propos de cette commande avec des exemples ? Merci |
|
|
00
|
|
|
#2 | ||
![]() ![]() ![]() Nicolas SouquetAdministrateur de base de données Inscription : janvier 2005 Messages : 4 667 ![]() |
Bonjour,
Essayez ceci : Code :
@++
__________________
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
|
|
|
#3 |
|
Invité de passage
![]() Pascal AdamInscription : avril 2011 Messages : 5 ![]() |
Personne ne connait la commande BCP ?
|
|
|
00
|
|
|
#4 |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 953 ![]() |
Donnez un exemple de ce que vous voulez faire...
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
|
|
|
#5 |
|
Invité de passage
![]() Pascal AdamInscription : avril 2011 Messages : 5 ![]() |
Database : TEST
Table : TESTBLOB Colonnes : INDICATIF char(10) FBLOB varbinary(max) Description du contenu des colonnes : INDICATIF = Type d'application FBLOB contient un fichier XML se rapportant à l'application Je dois descendre sur le disque d'un pc sur le réseau le fichier XML pour qu'il soit traité par une autre application. J'aimerais le faire via une commande .bat D'où mon intérêt à la commande BCP. Mais je n'y arrive pas. Quelle est la syntaxe correcte ? |
|
|
00
|
|
|
#6 |
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
Bonjour,
Le contexte n'est pas très précis, mais j'ai l'impression que bcp n'est pas forcément ce qu'il vous faut... Tel que vous présentez les choses, j'imagine que vous ne voudrez récupérer le contenu XML que d'une ligne particulière dans votre table ??? (je n'ai pas compris le but de la colonne INDICATIF) je suppose que l'application ne peut etre modifiée ? (sinon idéalement, elle pourrait récupérer le contenu XML avec une simple requête en base) Personnellement, pour répondre au besoin initial, je ferais un script (par exemple en powershell) qui tournerait sur la machine cible (votre pc sur le réseau), se connecterait à la BDD pour récupérer les données et les écrirait dans un fichier... car j'imagine aussi que vous allez devoir soit effacer, soit flagguer les données qui ont été exportées ? sinon vous allez les réexporter à chaque fois... |
|
|
00
|
|
|
#7 |
|
Invité de passage
![]() Pascal AdamInscription : avril 2011 Messages : 5 ![]() |
Le champ INDICATIF permet de savoir pour quelle application le fichier XML contenu dans le champ FBLOB est destiné.
Effectivement il n'est pas envisageable de changer l'application en amont. Il faut absolument traiter les données telles que je vous les ait présentées. La seule alternative possible est de traiter avec un champ CLOB au lieu d'un champ BLOB. En revanche, aucune action n'est attendue par rapport aux données initiales, aucun besoin de flaguer, supprimer ou mettre à jour les données exportées. Je n'ai jamais utilisé la commande BCP, mais je pense qu'elle permet bien de copier le contenu d'un champ d'une table sqlserver dans un fichier. Cela correspond exactement à ce que je cherche à réaliser. |
|
|
00
|
|
|
#8 |
|
Nouveau Membre du Club
![]() Loïc BernardConsultant en Business Intelligence Inscription : avril 2008 Messages : 44 ![]() |
Bonjour,
Aurais-tu par hasard la suite B.I. avec ton SQLSERVER? Parceque il y a un truc très très bien fait (si si si) qui s'apelle SSIS qui te permetrait de faire ca sans trop de peine... Bien à toi, Loic |
|
|
00
|
|
|
#9 |
![]() ![]() ![]() Nicolas SouquetAdministrateur de base de données Inscription : janvier 2005 Messages : 4 667 ![]() |
Il semble que ce soit un fichier plat qui contient plusieurs champs, dont le dernier est un document XML.
S'il n'y a pas de retour à la ligne avant la fin de chaque ligne à insérer dans la table, alors BCP peut très bien faire le travail ... Encore faudrait-il que nous ayons l'instruction BCP utilisée, ainsi que l'erreur obtenue ... @++
__________________
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
|
|
|
#10 |
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
Il me semble qu'il veut faire l'opération inverse justement :
Exporter le contenu d'une colonne XML vers un fichier XML sur le disque d'un PC distant... |
|
|
00
|
|
|
#11 | ||||
![]() ![]() ![]() Nicolas SouquetAdministrateur de base de données Inscription : janvier 2005 Messages : 4 667 ![]() |
OK, désolé.
Dans ce cas il suffit de créer un fichier de format. J'ai donc créé sur mon PC dont le nom est ELSUKET et la BD Demo, la table suivante : Code :
que j'ai peuplé comme suit : Code :
INSERT dbo.pada62 VALUES ('indicatif', CAST('<test>unTest</test>' AS varbinary(max))) Dans une fenêtre d'invite de commandes, à l'invite, après s'être positionné dans le dossier dans lequel on souhaite réaliser l'export (dans mon cas, C:\), on crée le fichier de format comme suit : Code :
bcp Demo.dbo.pada62 format nul -S ELSUKET -T -n -f pada62.fmt Je trouve le fichier à la racine de C. Ensuite on réalisé l'export. Toujours à l'invite, en étant positionné sur C: : Code :
bcp Demo.dbo.pada62 out pada62.dat -S ELSUKET -T -n -f pada62.fmt Et j'ai bien un fichier pada62.dat créé. Je teste l'import. Pour cela je crée une autre table vite-fait : Code :
Et l'import se réalise comme suit : Code :
bcp Demo.dbo.test_import IN pada62.dat -S ELSUKET -T -n -f pada62.fmt
Un SELECT * FROM dbo.test_import me confirme la ligne a bien été insérée. A lire : Utilitaire BCP Ce que je comprend moins c'est le but de stocker un document XML dans une colonne de type varbinary ... Le type XML a été introduit avec SQL Server 2005, et il permet d'enregistrer des schémas XML (CREATE XML SCHEMA COLLECTION) pour typer fortement une colonne de type XML. Cela permet de valider le document XML lors de sa manipulation, en plus des capacités d'extraction des données des documents XML stockés dans une telle colonne ... A lire : le petit billet que j'ai publié sur le choix des types de données @++
__________________
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 |
||||
|
20
|
|
|
#12 |
|
Invité de passage
![]() Pascal AdamInscription : avril 2011 Messages : 5 ![]() |
Je rentre d'une semaine de congé et je découvre une solution qui résout parfaitement mon problème. Un grand merci.
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com