选择XML节点作为T-SQL中的XML
这个看起来很简单,但我肯定错过了什么 鉴于此SQL:选择XML节点作为T-SQL中的XML,sql,sql-server,xml,sql-server-2005,Sql,Sql Server,Xml,Sql Server 2005,这个看起来很简单,但我肯定错过了什么 鉴于此SQL: declare @xml XML set @xml = '<people> <person> <name>Matt</name> <surname>Smith</surname> <person> <person> <name>John</name> <surname>
declare @xml XML
set @xml =
'<people>
<person>
<name>Matt</name>
<surname>Smith</surname>
<person>
<person>
<name>John</name>
<surname>Doe</surname>
<person>
</people>'
declare@xml
set@xml=
'
马特
史密斯
约翰
雌鹿
'
您将如何获得包含以下内容的表:
people
----------------------------------------------------------------------
<person>\n <name>Matt</name>\n <surname>Smith</surname>\n <person>
<person>\n <name>John</name>\n <surname>Doe</surname>\n <person>
人
----------------------------------------------------------------------
\n马特\n史密斯\n
\n约翰\n多伊\n
ie:将整个节点作为nvarchar(NNN)元素,而不仅仅是它们的名称、属性或值
我试过使用node(),text(),fn:node(),fn:text(),等等。。。努芬 哎呀,我想我又回答了我自己的问题了
SELECT
pref.query('.') as PersonSkills
FROM
@xml.nodes('/*/*') AS People(pref)
此外,如果有人感兴趣,这里有一个查询扩展,它只返回根节点的直接子节点,如果它们本身有子节点,则返回xml:
SELECT
pref.query('.') as XmlExtract
FROM
@xml.nodes('/*/*') AS extract(pref)
WHERE
pref.value('./*[1]', 'nvarchar(10)') IS NOT NULL