IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MS SQL Server Discussion :

Select xml + contenu d'une autre colonne


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2006
    Messages : 24
    Par défaut Select xml + contenu d'une autre colonne
    Bonjour,

    Je souhaite recuperer le contenu d'un champ xml et d'un autre de type int de la maniere suivante:

    Contenu du champ xml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <data>
    <texte>Un texte</texte>
    </data>
    Contenu du champ int (autre colonne) = 1

    J'aimerai recuperer le contenu xml et int comme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <data>
    <id>1</id>
    <texte>Un texte</texte>
    </data>
    Merci d'avance
    Pierre

  2. #2
    Membre éprouvé

    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 448
    Par défaut
    Il n'y a jamais qu'un seul élément data dans tes deux document XML ?
    Pourrais-tu nous indiquer une ligne typique complète de la table où ces colonnes XML sont présentes ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2006
    Messages : 24
    Par défaut
    Bonjour, et merci pour l'interet que vous portez à mon problème.

    En fait, j'ai une table avec (entre autres) une colonne -int- nomée ref et une colonne -xml- nomée data.

    Les données xml stockée dans la colonne data sont sous la forme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <data>
    <code>Le code</code>
    <ligne1>BlaBla1</ligne1>
    <ligne2>BlaBla2</ligne2>
    ...
    </data>
    Lors d'un SELECT, je souhaiterai recuperer les donées dans un seul flux xml, par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <data>
    <reference>La valeur de la colonne ref</reference>
    <code>Le code</code>
    <ligne1>BlaBla1</ligne1>
    <ligne2>BlaBla2</ligne2>
    ...
    </data>
    Pierre

  4. #4
    Expert confirmé
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Par défaut
    Bonjour,

    Si j'ai bien compris votre question cela donnerait quelque chose du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT 
    	reference,
    	CAST('<data><reference>' + CAST(reference AS VARCHAR(10)) + '</reference>' +
    	CAST(d.query('/data/*') AS VARCHAR(MAX)) +
    	'</data>' AS XML) AS data
    FROM @XML
    CROSS APPLY data.nodes('/data') AS T(d)
    Edit : avec la réponse en entier c mieux

    ++

  5. #5
    Membre éprouvé

    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 448
    Par défaut
    Une réponse en XQuery (que je ne connais pas encore) serait de meilleure augure.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2006
    Messages : 24
    Par défaut
    C'est parfait, exactement ce qu'il faut.

    Grand merci.

  7. #7
    Expert confirmé
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Par défaut
    Une réponse en XQuery (que je ne connais pas encore) serait de meilleure augure.
    Effectivement, l'idée de caster le XML ne me plaisait pas non plus. Mais je ne connais pas encore la fonction sql:column() fort utile dans ce cas là

    Voici un code plus propre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    DECLARE @XML TABLE 
    (
        reference INT,
        data XML 
    )
     
    INSERT INTO @XML (reference, data)
    SELECT 1, '<data>
    			<code>Le code</code>
    			<ligne1>BlaBla1</ligne1>
    			<ligne2>BlaBla2</ligne2>
    		   </data>'
    UNION ALL
    SELECT 2, '<data>
    			<code>Le code</code>
    			<ligne1>BlaBla1</ligne1>
    			<ligne2>BlaBla2</ligne2>
    		   </data>';
     
    SELECT 
    	reference,
    	data.query(
    		'<data>
    			<id>{sql:column("reference")}</id>
    			{/data/*}
    		 </data>')
    FROM @XML;
    ++

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 05/03/2012, 15h04
  2. Réponses: 2
    Dernier message: 21/09/2010, 18h19
  3. remplissage automatique d'une colonne en fonction du contenu d'une autre
    Par renton59 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 20/09/2010, 18h36
  4. Réponses: 3
    Dernier message: 13/05/2009, 16h27
  5. [MySQL] Ajouter le contenu d'une colonne à celui d'une autre colonne
    Par infiniti dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 30/11/2008, 09h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo