在T-SQL中选择XML节点作为XML

4
这个看起来很简单,但我可能忽略了什么……
给定这个 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>

ie: 抓取整个节点作为 nvarchar(NNN) 元素,而不仅仅是它们的名称、属性或值?

我已经尝试使用 node()、text()、fn:node()、fn:text() 等等... 但都没有成功!

2个回答

3
此外,如果有人感兴趣,这里有一个查询的扩展,它只返回根节点的直接子节点作为xml,如果它们本身有子节点:
SELECT
    pref.query('.') as XmlExtract
FROM  
    @xml.nodes('/*/*') AS extract(pref)
WHERE
    pref.value('./*[1]', 'nvarchar(10)') IS NOT NULL

2
哎呀,我想我又自己解决了问题...
SELECT
    pref.query('.') as PersonSkills
FROM  
    @xml.nodes('/*/*') AS People(pref)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接