选择XML节点在T-SQL

问题描述:

这一个看起来很简单,但我必须失去了一些东西... 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)的元件,而不仅仅是它们的名称,属性或值?我试过使用节点(),文本(),FN:节点(),FN:文本(),等等等等......还有!

此外,如果有人有兴趣,这里是一个扩展,只返回根节点的直接子节点查询,如xml,如果他们自己有子节点:

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

Crikey,我想我已经再次回答我自己的问题......

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