2011-03-19 5 views
1

j'ai une chaîne XML à partir d'un autre système, je dois sélectionnez XML comme une table dans sqlSélectionnez nœuds XML, construire une table à partir d'éléments imbriqués

<jrt> 
    <item> 
    <id>cell1</id> 
    <id>cell2</id> 
    <id>cell3</id> 
    </item> 
    <item> 
    <id>cell4</id> 
    <id>cell5</id> 
    <id>cell6</id> 
    </item> 
</jrt> 

Les résultats devraient être:

row   value 
----------- ----- 
1   cell1 
2   cell2 
3   cell3 
1   cell4 
2   cell5 
3   cell6 

Avis: le numéro de la ligne est l'id de chaque élément

S'il vous plaît aidez-moi à utiliser tsql sélectionnez ce xml?

Répondre

2
declare @xml xml set @xml = ' 
<jrt> 
    <item> 
    <id>cell1</id> 
    <id>cell12</id> 
    <id>cell83</id> 
    </item> 
    <item> 
    <id>cell4</id> 
    <id>cell5</id> 
    <id>cell6</id> 
    </item> 
</jrt>' 

SELECT item.number itemrow, 
     id.number idrow, 
     o.c.value('.', 'nvarchar(max)') value 
FROM master..spt_values item 
inner join master..spt_values id on id.type='P' and id.number >= 1 
CROSS APPLY @xml.nodes('/jrt/item[sql:column("item.number")]') n(c) 
CROSS APPLY n.c.nodes('id[sql:column("id.number")]') o(c) 
where item.type='P' and item.number >= 1 
ORDER BY itemrow, idrow 

Avec l'aide de https://connect.microsoft.com/SQLServer/feedback/ViewFeedback.aspx?FeedbackID=383888

+0

Je vous remercie very much !!! c'est mon désir! – guaike

Questions connexes