2010-07-07 90 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)的元件,而不僅僅是它們的名稱,屬性或值?我試過使用節點(),文本(),FN:節點(),FN:文本(),等等等等......還有!

回答

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)