Accueil > Forum > > > > FOR XML EXPLICIT..... Lyrics?!
FOR XML EXPLICIT..... Lyrics?!
mercredi 28 juin 2006 à 12:19:45 |
FOR XML EXPLICIT..... Lyrics?!

Omerdude
|
Bonjour, Je suis en train de travailler sur une requête, et vu que c'est pas du tout mon truc à la base, j'ai un peu de mal... Explication: J'ai une BDD hébergée sur SQL Server 2000 d'où je dois extraire des données à envoyer à un client qui travaille sous Oracle. Elle contient une table parent et plusieurs tables enfants. Le format d'échange doit être du xml bien structuré, un peu dans ce style: <parent 1> <enfant 1-1 /> <enfant 1-2 /> </parent 1> <parent 2> <enfant 2-1 /> ........ Or pas moyen d'arriver à ce résultat! Ma requête crée bien les noeuds parents, sans problèmes, mais joint tous les noeuds enfants au dernier noeud parent! Ca donne un peu ça: <parent 1> </parent 1> <parent 2> <enfant 1-1 /> <enfant 1-2 /> <enfant 2-1 /> ........ Ce qui est assez facheux! Je joins ma requête (vous moquez pas, je suis pas un pro de SQL et je suis en plein bidouillage! Il se peut que certaines erreurs soient énormes!): SELECT 1 AS Tag, Null AS Parent, C.CLI_ID AS [CLIENT!1!CLI_ID!ELEMENT!IDREF], CLI_CATEGORIE AS [CLIENT!1!CLI_CATEGORIE!ELEMENT], CLI_RSOC1 AS [CLIENT!1!CLI_RSOC1!ELEMENT], CLI_RSOC2 AS [CLIENT!1!CLI_RSOC2!ELEMENT], CLI_CIVILITE AS [CLIENT!1!CLI_CIVILITE!ELEMENT], CLI_NOM AS [CLIENT!1!CLI_NOM!ELEMENT], CLI_PRENOM AS [CLIENT!1!CLI_PRENOM!ELEMENT], NULL AS [ENFANT!2!CLI_ID!HIDE], NULL AS [ENFANT!2!ENF_RANG!ELEMENT], NULL AS [ENFANT!2!ENF_GENRE!ELEMENT], NULL AS [ENFANT!2!ENF_NOM!ELEMENT], NULL AS [ENFANT!2!ENF_PRENOM!ELEMENT], NULL AS [ENFANT!2!ENF_DNAISS!ELEMENT] FROM CLIENT C, ENFANT E UNION SELECT 2, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL , E.CLI_ID, E.ENF_RANG, E.ENF_GENRE, E.ENF_NOM, E.ENF_PRENOM, E.ENF_DNAISS FROM CLIENT C INNER Join ENFANT E ON E.CLI_ID=C.CLI_ID AND E.ENF_RANG != 0 FOR XML EXPLICIT Sachant que je ne travaille pour l'instant que sur la jointure de deux tables... déjà que ça marche pas je vais pas tout compliquer pour la plaisir! Merci d'avance à ceux qui sauront éclairer ma lanterne... merDude
|
|
jeudi 29 juin 2006 à 11:30:22 |
Re : FOR XML EXPLICIT..... Lyrics?!

skweeky
|
Je ne suis pas sûr d'avoir tout compris... Mais çà ne serait pas plus simple comme çà :
SELECT 1 AS Tag, Null AS Parent, C.CLI_ID AS [CLIENT!1!CLI_ID!ELEMENT!IDREF], CLI_CATEGORIE AS [CLIENT!1!CLI_CATEGORIE!ELEMENT], CLI_RSOC1 AS [CLIENT!1!CLI_RSOC1!ELEMENT], CLI_RSOC2 AS [CLIENT!1!CLI_RSOC2!ELEMENT], CLI_CIVILITE AS [CLIENT!1!CLI_CIVILITE!ELEMENT], CLI_NOM AS [CLIENT!1!CLI_NOM!ELEMENT], CLI_PRENOM AS [CLIENT!1!CLI_PRENOM!ELEMENT], E.CLI_ID AS [ENFANT!2!CLI_ID!HIDE], E.ENF_RANG AS [ENFANT!2!ENF_RANG!ELEMENT], E.ENF_GENRE AS [ENFANT!2!ENF_GENRE!ELEMENT], E.ENF_NOM AS [ENFANT!2!ENF_NOM!ELEMENT], E.ENF_PRENOM AS [ENFANT!2!ENF_PRENOM!ELEMENT], E.ENF_DNAISS AS [ENFANT!2!ENF_DNAISS!ELEMENT] CLIENT C INNER Join ENFANT E ON E.CLI_ID=C.CLI_ID AND E.ENF_RANG != 0
Je ne vois pas l'interet du UNION ni ce que tu souhaites faire exactement.
----------------- Christian Robert Winwise
|
|
jeudi 29 juin 2006 à 11:48:34 |
Re : FOR XML EXPLICIT..... Lyrics?!

Omerdude
|
zBonjour, En fait j'essaie de créer un fichier xml qui regroupe plusieurs bases. A terme, mon fichier xml devra ressembler à ça: <CLIENT> <CLI_ID></CLI_ID> <CLI_CATEGORIE></CLI_CATEGORIE> ........ <ENFANT> <ENF_RANG></ENF_RANG> <ENF_GENRE></ENF_GENRE> .......... </ENFANT> <CARTE> <CART_ID></CART_ID> ............ </CARTE> <COORDONNEES> <COO_ADR1></COO_ADR2> ........... </COORDONNEES> <NPAI> <NPAI_ID></NPAI_ID> ............ </NPAI> <HISTFID> <HISTFID_ID></HISTFID_ID> .......... </HISTFID> </CLIENT> C'est à dire que concrètement, on doit avoir 1 table parent et 5 tables enfants imbriquées toutes au même niveau. J'ai essayé le INNER JOIN pour chacune des tables enfants (ce qui fait donc 5 INNER JOIN ^^) mais ça me donne un truc du genre: <CLIENT> <ENFANT> <CARTE> <COORDONNEES> <NPAI> <HISTFID> </HISTFID> </NPAI> </COORDONNEES> </CARTE> </ENFANT> </CLIENT> Par ailleurs, je ne sais pas trop non plus si le UNION est une solution. Ca m'arrange parce que ça vire les doublons, mais si faut s'en passer je ferai sans! merDude
|
|
lundi 3 juillet 2006 à 12:23:04 |
Re : FOR XML EXPLICIT..... Lyrics?!

Malkuth
|
Réponse acceptée !
Salut, en fait ce qu'il manque c'est que ta table n'est pas ordonnée
SELECT 1 AS Tag, Null AS Parent, C.CLI_ID AS [CLIENT!1!CLI_ID!ELEMENT!IDREF], CLI_CATEGORIE AS [CLIENT!1!CLI_CATEGORIE!ELEMENT], CLI_RSOC1 AS [CLIENT!1!CLI_RSOC1!ELEMENT], CLI_RSOC2 AS [CLIENT!1!CLI_RSOC2!ELEMENT], CLI_CIVILITE AS [CLIENT!1!CLI_CIVILITE!ELEMENT], CLI_NOM AS [CLIENT!1!CLI_NOM!ELEMENT], CLI_PRENOM AS [CLIENT!1!CLI_PRENOM!ELEMENT], NULL AS [ENFANT!2!CLI_ID!HIDE], NULL AS [ENFANT!2!ENF_RANG!ELEMENT], NULL AS [ENFANT!2!ENF_GENRE!ELEMENT], NULL AS [ENFANT!2!ENF_NOM!ELEMENT], NULL AS [ENFANT!2!ENF_PRENOM!ELEMENT], NULL AS [ENFANT!2!ENF_DNAISS!ELEMENT] FROM CLIENT C, ENFANT E
UNION
SELECT 2, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL , E.CLI_ID, E.ENF_RANG, E.ENF_GENRE, E.ENF_NOM, E.ENF_PRENOM, E.ENF_DNAISS FROM CLIENT C INNER Join ENFANT E ON E.CLI_ID=C.CLI_ID AND E.ENF_RANG != 0 FOR XML EXPLICIT
En effet il faut imaginée que les champ renvoyer sont d'abord tous ceux du premier select puis tous ceux du second select donc tous les enregistrement du deuxiéme select sont associè au dernier enregistrement du premier select ( enlève le FOR XML EXPLICIT pour t'en faire une idée).
SELECT 1 AS Tag, Null AS Parent, C.CLI_ID AS [CLIENT!1!CLI_ID!ELEMENT!IDREF], CLI_CATEGORIE AS [CLIENT!1!CLI_CATEGORIE!ELEMENT], CLI_RSOC1 AS [CLIENT!1!CLI_RSOC1!ELEMENT], CLI_RSOC2 AS [CLIENT!1!CLI_RSOC2!ELEMENT], CLI_CIVILITE AS [CLIENT!1!CLI_CIVILITE!ELEMENT], CLI_NOM AS [CLIENT!1!CLI_NOM!ELEMENT], CLI_PRENOM AS [CLIENT!1!CLI_PRENOM!ELEMENT], NULL AS [ENFANT!2!CLI_ID!HIDE], NULL AS [ENFANT!2!ENF_RANG!ELEMENT], NULL AS [ENFANT!2!ENF_GENRE!ELEMENT], NULL AS [ENFANT!2!ENF_NOM!ELEMENT], NULL AS [ENFANT!2!ENF_PRENOM!ELEMENT], NULL AS [ENFANT!2!ENF_DNAISS!ELEMENT] FROM CLIENT C, ENFANT E
UNION
SELECT 2, 1, C.CLI_ID, NULL, NULL, NULL, NULL, NULL, NULL , E.CLI_ID, E.ENF_RANG, E.ENF_GENRE, E.ENF_NOM, E.ENF_PRENOM, E.ENF_DNAISS FROM CLIENT C INNER Join ENFANT E ON E.CLI_ID=C.CLI_ID AND E.ENF_RANG != 0 ORDER BY [CLIENT!1!CLI_ID!ELEMENT!IDREF], [ENFANT!2!CLI_ID!HIDE] FOR XML EXPLICIT
Il y'a deux petite modif : d'abord dans le second select j' ai rajouter C.CLI_ID pour permettre de trier les enregistrements en ordonénant les champs sur la colone [CLIENT!1!CLI_ID!ELEMENT!IDREF] de cette manière les champs enfant seront placer sous les champs parents correspondants ensuite on ordonne sur la colone [ENFANT!2!CLI_ID!HIDE], pour assuré que les parent seront bien ordonnée devant leus enfant en effet tous les parents on un [ENFANT!2!CLI_ID!HIDE] égal a null et tous le enfant on un [ENFANT!2!CLI_ID!HIDE] différent de zéro.
regarde la diférence avec ta première mouture en enlevant là encore le FOR XML EXPLICIT.
Bon j'ai pas eu le temps de tester mais ca devrait marcher (en tout cas l'esprit est là : ordonné les enregistrements).
|
|
lundi 3 juillet 2006 à 15:23:48 |
Re : FOR XML EXPLICIT..... Lyrics?!

Omerdude
|
Franchement, merci enormément de ce coup de main! Non seulement ça marche, mais en plus j'ai même compris pourquoi! Ca faisait un petit moment que je me prenais la tête là dessus et j'avais fini par ne plus faire preuve de logique. Et la, en quelques lignes, tout redevient clair! Encore merci!!!!!!! merDude
|
|
Cette discussion est classée dans : client, element, enfant, cli, enf
Répondre à ce message
Sujets en rapport avec ce message
Requête sql sur plusieurs tables [ par Eros2007 ]
Bonjour tout le monde.voila ma question:j'utilise une requette sql pour pouvoir faire un preview et imprimer par la suite les enregistrements des clie
Logique TSQL [ par cbu ]
Bonjour,je suis complètement dans le flou avec ma procédure stockée ..Je vous explique :J'ai 2 tables T_CLIENT Cli_IDCli_NomCli_PrenomT_FACTUREFac_IDF
java_oracle [ par aamsa ]
bonjour a tous est ce que quelqu un peut m aider a propos oracle et java, voila mon probleme:j ai une procedure stochee voila son code: create or repl
Procedure de recherche [ par hardzip ]
Bonjour tout le mondeJe suis actuellement entrain de mettre en place un formulaire de recherche avec asp et .NET et j'ai un probleme qui me bloque de
Obtenir l'IP du client en mysql [ par Xantra ]
Bonjour,Je voudrai créer un champ 'ip', qui serai automatiquement remplit avec l'ip du client qui insert une donné dans la table.Par exemple si je veu
Procedure mysql [ par gearmat ]
salut tout le monde, j'ai un problème avec ma procédure stocké elle n'affecte pas mes valeur et elle me fait 2 warning le sujet que je doit faire c'
SELECT et NULL [ par babe59 ]
Bonjour,J'ai une table TBL_CLIENT avec une colonne "CIVILITE" qui peut contenir des valeurs NULL.Le problème est que lorsque que j'ai un SELECT sur ce
Autoriser une connexion SQL sur 1 server [ par ManuAntibes ]
Bonjour Je souhaite me lancer pour tester ma connexion à SQL Server 2005 Express sur un windows 2003 Server.Je souhaite me connecter avec l'authentifi
problee de requete sur 3 tables [ par 6miK ]
Bonsoir,j'aimerais faire une requête sur 3 tables différentes pour pouvoir avoir tout les clients d'un fournisseur grâce à la table produit qui conna
update avec jointure [ par jesscolor ]
Bonjour,j'ai un problème que je suis sure est simple mais j'ai cherché des solutions partout sur internet mais rien ne marche. En effet, je fais rempl
Livres en rapport
|
Derniers Blogs
UNE JOLIE-HORLOGE ET PAS QU'UN PEU !UNE JOLIE-HORLOGE ET PAS QU'UN PEU ! par neodante
Pour les possesseurs d'iPhone, ça y est Bijin Tokei - qui se traduit littéralement en Français par " Jolie Horloge " - est arrivé et GRATUITEMENT s'il vous plaît ! Après la version Tokyo, Hokkaido, night club, racing, Gal, "pour les mademoiselles'", . voi...
Cliquez pour lire la suite de l'article par neodante TECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICESTECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICES par ROMELARD Fabrice
Animé par: Gaetan Bouveret et Julien Chomarat Business Connectivity Services (BCS) est dans SharePoint 2010 la version 2 de Business Data Catalog (BDC dans SharePoint 2007). Il s'agit de la solution permettant de visualiser des données provenan...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice [DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE[DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE par orion
Comme de nombreux geek, je suis un grand amateur de série TV et je rate régulièrement des épisodes de mes séries préférés. Une solution s'offre à vous avec ce merveilleux site : Tv Gorge - www.tvgorge.com Moteur de recherche à l'appui, vous pouvez ...
Cliquez pour lire la suite de l'article par orion TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Vincent Bellet et Baptiste Giraudier La BI dans SharePoint 2010, Les nouveaux services d'application dans SP2010 et SQL Server Reporting services 2008 R2. La BI dans SharePoint est généralisée pour tous afin de permettre à tous les coll...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Forum
PROCEDURE MYSQLPROCEDURE MYSQL par gearmat
Cliquez pour lire la suite par gearmat
Logiciels
DB-MAIN (9.1.0)DB-MAIN (9.1.0)DB-MAIN is a data-modeling and data-architecture tool. It is designed to help developers and anal... Cliquez pour télécharger DB-MAIN Xilisoft DPG Convertisseur (5.1.37.0120)XILISOFT DPG CONVERTISSEUR (5.1.37.0120)Xilisoft DPG Convertisseur offre aux fans de Nintendo DS une bonne solution leur permettant de dé... Cliquez pour télécharger Xilisoft DPG Convertisseur GraphicsGale (2.01.01)GRAPHICSGALE (2.01.01)GraphicsGale est un logiciel de PixelArt avec de nombreuse fonctionnalités permettant de réalisé ... Cliquez pour télécharger GraphicsGale Architecte 3D (Platinum 2010)ARCHITECTE 3D (PLATINUM 2010)Architecte 3D Platinium vous permet de concevoir facilement les plans votre future maison, de l'é... Cliquez pour télécharger Architecte 3D TeamViewer 5 (TeamViewer 5)TEAMVIEWER 5 (TEAMVIEWER 5)Dépanner un ami,expliquer une manipulation devient un jeu d'enfant.
Prise en main d'un autre ord... Cliquez pour télécharger TeamViewer 5
Comparez les prix

HTC Magic
Entre 429€ et 429€
|