2010-12-03 22 views
0

J'ai une colonne xml dans ma base de données sql server 2008. Échantillon XML dans chaque ligne de ma tableExtraction d'éléments de xml à rows dans une instruction select

<document> 
<part1> 
    <listitem>val1</listitem> 
    <listitem>val2</listitem> 
    <listitem>val3</listitem> 
</part1> 
<part2> 
    <listitem>val4</listitem> 
</part2> 
</document> 

Je souhaite sélectionner tous les éléments de toutes les lignes. De l'échantillon ci-dessus, je devrais obtenir quatre lignes avec la valeur listitem.

La réponse est

select x.nd.value ('(.)[1]', 'varchar(250)') as ValuesFromXml 
from TableWithXmlColumn t cross apply t.XmlContent.nodes (
'//listitem') x(nd); 

Merci pour l'aide

Répondre

2

Vous pouvez le faire comme ceci:

select Col.value('.', 'varchar(20)') 
from yourtable 
cross apply XmlColumn.nodes('//listitem') as NewTable(Col) 
+0

Si vous publiez code ou XML, ** ** S'il vous plaît mettre en évidence les lignes dans l'éditeur de texte et cliquez sur le bouton "code" (101 010) sur la barre d'outils de l'éditeur pour bien mettre en forme et la syntaxe le mettre en évidence! –