2010-07-07 6 views
4

Celui-ci semble si simple, mais je dois manquer quelque chose ...Sélectionnez nœuds XML comme XML dans T-SQL

Compte tenu de cette SQL:

declare @xml XML 
set @xml = 
'<people> 
    <person> 
    <name>Matt</name> 
    <surname>Smith</surname> 
    <person> 
    <person> 
    <name>John</name> 
    <surname>Doe</surname> 
    <person> 
</people>' 

Comment iriez-vous à obtenir une table contenant:

people 
---------------------------------------------------------------------- 
     <person>\n  <name>Matt</name>\n  <surname>Smith</surname>\n  <person> 
     <person>\n  <name>John</name>\n  <surname>Doe</surname>\n  <person> 

-à-dire: Saisissant nœuds entiers comme nvarchar (NNN) éléments, pas seulement leurs noms, les attributs ou valeurs?

J'ai essayé d'utiliser node(), text(), fn: node(), fn: texte(), bla bla etc ... Nuffin encore!

Répondre

2

De plus, si quelqu'un est intéressé, voici une extension à la requête qui renvoie uniquement les nœuds enfants immédiats du nœud racine, comme xml, s'ils ont eux-mêmes des nœuds enfants:

SELECT 
    pref.query('.') as XmlExtract 
FROM 
    @xml.nodes('/*/*') AS extract(pref) 
WHERE 
    pref.value('./*[1]', 'nvarchar(10)') IS NOT NULL 
2

Crikey, je pense avoir répondu à ma question à nouveau ...

SELECT 
    pref.query('.') as PersonSkills 
FROM 
    @xml.nodes('/*/*') AS People(pref) 
Questions connexes