SQL SERVER中XML查询:FOR XML指定PATH
2014-04-20 00:28
344 查看
SQL SERVER中XML查询:FOR XML指定PATH
前言
在SQL SERVER中,XML查询可以指定RAW,AUTO,EXPLICIT,PATH。本文用一些实例介绍SQL SERVER中指定PATH的XML查询。PATH参数
PATH('参数'),参数是用来重命名ROW的,ROW是默认生成的名称。select 'Hui' for xml path 结果:<row>Hui</row>
select 'Hui' for xml path ('root') 结果:<root>Hui</root>
不带名称的列
select 'Hui Li' for xml path结果:
<row>Hui Li</row>
具有名称的列
列名以 @ 符号开头
select 'Hui Li' as [@name] for xml path 结果:<row name="Hui Li" />列名不以 @ 符号开头
select 'Hui Li' as [name] for xml path 结果:<row>
<name>Hui Li</name>
</row>
列名不以 @ 符号开头并包含斜杠标记 (/)
select 'Hui' as [name/first] for xml path 结果:<row>
<name>
<first>Hui</first>
</name>
</row>
多个列共享同一前缀
select 'Hui' as [name/first],'Li' as [name/last] for xml path 结果:<row>
<name>
<first>Hui</first>
<last>Li</last>
</name>
</row>
注意大小写敏感。
共享同一前缀多列被打断顺序
select 'Hui' as [name/first],'Chicago' as [address],'Li' as [name/last] for xml path 结果:<row>
<name>
<first>Hui</first>
</name>
<address>Chicago</address>
<name>
<last>Li</last>
</name>
</row>
称指定为通配符的列
select 'Hui' as [*],' ' as [*], 'Li' as [*] for xml pathselect 'Hui',' ', 'Li' for xml path
上面两个SQL语句执行结果相同:
<row>Hui Li</row>
如果是XML类型,则作为一个子元素插入XML树。
declare @table table(name varchar(50), xmlcontent xml)
insert into @table select 'Hui', '<root><person></person></root>'
select name,xmlcontent as [*] from @table for xml path
结果:
<row>
<name>Hui</name>
<root>
<person />
</root>
</row>
列名为 XPath 节点测试的列
列名 | 行为 |
---|---|
text() | 对于名为 text() 的列,该列中的字符串值将被添加为文本节点。 |
comment() | 对于名为 comment() 的列,该列中的字符串值将被添加为 XML 注释。 |
node() | 对于名为 node() 的列,结果与列名为通配符 (*) 时相同。 |
处理指令(名称) | 如果列名为处理指令,该列中的字符串值将被添加为此处理指令目标名称的 PI 值。 |
select 'Hui' as [first/text()],'Li' as [last/node()],'Hui Li' as [fullname/comment()],'test' as "processing-instruction(PI)" for xml path
结果:
<row>
<first>Hui</first>
<last>Li</last>
<fullname>
<!--Hui Li-->
</fullname>
<?PI test?>
</row>
带有指定为 data() 的路径的列名
如果被指定为列名的路径为 data(),则在生成的 XML 中,该值将被作为一个原子值来处理。如果序列化中的下一项也是一个原子值,则将向 XML 中添加一个空格字符。这在创建列表类型化元素值和属性值时很有用。with T
as
(
select 11 as id
union all
select 22
union all
select 33
)
select id as [data()] from T for xml path ('')
结果:
11 22 33
这里的('')可以理解为把XML的根元素名称设为空。
NULL值列
select 'hui' as [name],null as [address] for xml path结果:
<row>
<name>hui</name>
</row>
没有任何相关address的内容,指定ELEMENTS XSINIL后:
select 'hui' as [name],null as [address] for xml path ,ELEMENTS XSINIL
结果:
<row xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<name>hui</name>
<address xsi:nil="true" />
</row>
PATH 模式中的命名空间支持
WITH XMLNAMESPACES(N'乐可乐可的部落格' as a)SELECT 1 as 'a:b'
FOR XML PATH
结果:
<row xmlns:a="乐可乐可的部落格">
<a:b>1</a:b>
</row>
总结
以上对指定EXPLICIT的XML查询就介绍完了。到此为止,SQL SERVER中的指定RAW,AUTO,EXPLICIT,PATH的XML查询就全部介绍完毕。SQL SERVER中XML查询:FOR XML指定RAW
SQL SERVER中XML查询:FOR XML指定AUTO
SQL SERVER中XML查询:FOR XML指定EXPLICIT
SQL SERVER中XML查询:FOR XML指定PATH
关于XML类型,请参考:http://blog.csdn.net/leewhoee/article/details/8571286
关于XML索引,请参考:http://blog.csdn.net/leewhoee/article/details/8579743
相关文章推荐
- SQL SERVER中XML查询:FOR XML指定PATH
- SQL Server 2008 R2——使用FOR XML PATH实现多条信息按指定格式在一行显示
- 使用 FOR XML PATH 合并SQL Server查询结果的重复行
- SQL SERVER中XML查询:FOR XML指定RAW
- SQL SERVER中XML查询:FOR XML指定AUTO
- SQL SERVER中XML查询:FOR XML指定AUTO
- SQL SERVER中XML查询:FOR XML指定EXPLICIT
- SQL SERVER中XML查询:FOR XML指定AUTO
- SQL SERVER中 用FOR XML PATH将查询结果以XML输出 然后应用于 sql 合并字段功能介绍
- SQL Server 【CTE + FOR XML PATH】使用笔记~
- [转]合并多行查询数据到一行:使用自连接、FOR XML PATH('')、STUFF或REPLACE函数
- SQL Server 合并列 for xml path
- SQL Server 中利用STUFF和FOR XML PATH()实现多行数据的拼接
- sql server 使用for xml path 将1列多行转换为字符串连接起来,俗称 sql 合并字符
- FOR XML PATH 可以将查询结果根据行输出成XML格式
- 合并多行查询数据到一行:使用自连接、FOR XML PATH('')、STUFF或REPLACE函数
- Sql Server合并多行询数据到一行:使用自连接、FOR XML PATH('')、STUFF或REPLACE函数
- 合并多行查询数据到一行:使用自连接、FOR XML PATH('')、STUFF或REPLACE函数
- sql server 使用for xml path 将1列多行转换为字符串连接起来
- Sql Server合并多行询数据到一行:使用自连接、FOR XML PATH('')、STUFF或REPLACE函数