2013-03-05 5 views
1

J'ai une table avec xml stockée en NVARCHAR. C'est juste comme ça.Convertir la colonne de la table SQL Server 2008 en valeurs xpath et xpath

Le xml ressemble

<Container> 
    <Data> 
    <SomeNode>val1</SomeNode> 
    </Data> 
    <Data> 
    <SomeNode>val2</SomeNode> 
    </Data> 
</Container> 

essentiellement je besoin d'une requête à tous val1 ... Valx de toutes les chaînes de xml dans le tableau.

Jusqu'à présent, je suis parvenu à trouver

SELECT CAST(XmlColumn AS XML).query('//SomeNode') FROM ThatTableWithXmlInStrings 

qui me donne la liste des listes de noeuds. Et là, je suis perdu: comment est-ce que je peux aplatir cela en valeurs uniques?

Répondre

3
select T2.X.value('text()[1]', 'nvarchar(10)') 
from ThatTableWithXmlInStrings 
    cross apply (select cast(XmlColumn as xml)) T1(X) 
    cross apply T1.X.nodes('/Container/Data/SomeNode') as T2(X) 
+0

holy cow! c'est fou mais ça marche! – durilka

0

Il existe deux méthodes:

    fonction
  1. texte add() pour XQuery
  2. utilisation de la méthode nœuds link
+0

vous dire requête ('// SomeNode/texte() ')? qui colle juste val0val1, val2, val3val4 ce qui n'est pas ce dont j'ai besoin – durilka

+0

Désolé, j'avais quelque chose d'autre à l'esprit, essayez la deuxième méthode que l'on est ce que vous avez besoin – Yohn

Questions connexes