2010-07-07 2 views
4

Это одна кажется так просто, но я должен быть что-то не хватает ...Выберите узлы XML как XML в T-SQL

Учитывая это SQL:

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

Как бы вы идти о получении таблицы содержащий:

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

т.е. Схватив целые узлы в качестве NVARCHAR элементов (NNN), а не только их имена, атрибуты и значения?

Я пробовал использовать node(), text(), fn: node(), fn: text(), blah blah и т. Д. Nuffin еще!

ответ

2

Далее, если кому-то интересно, вот расширение запроса, который возвращает только непосредственные дочерние узлы корневого узла, поскольку xml, если они сами имеют дочерние узлы:

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

Crikey, я думаю, что я ответил на свой вопрос еще раз ...

SELECT 
    pref.query('.') as PersonSkills 
FROM 
    @xml.nodes('/*/*') AS People(pref) 
Смежные вопросы