首页 > 数据库 >sqlserver FOR XML查询参数path的实例

sqlserver FOR XML查询参数path的实例

时间:2022-11-14 20:24:54浏览次数:83  
标签:XML xml sqlserver Hui Li path select

 

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 path
select '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查询就全部介绍完毕。

标签:XML,xml,sqlserver,Hui,Li,path,select
From: https://www.cnblogs.com/yclizq/p/16890247.html

相关文章

  • SQL中的OpenXML使用案例
    DECLARE@idocintDECLARE@docvarchar(1000)SET@doc='<ROOT><CustomerCustomerID="VINET"ContactName="PaulHenriot"><OrderOrderID="10248"Customer......
  • SQL 存储过程 解析XML
    第一种说明:我看过这样一篇文章,如下 在SQL Server2005中,微软延续了 2000中一个特性(即支持XML类型的数据),并加强了对XML 数据列、XML变量以及XML索引的支持。 ......
  • SQL openxml用法及案例
    SQLopenxml用法 OPENXML通过XML文档提供行集视图。由于OPENXML是行集提供程序,因此可在会出现行集提供程序(如表、视图或OPENROWSET函数)的Tra......
  • 把XML数据插入到SQL Server数据库的表中
     把XML数据插入到SQLServer数据库的表中我们可以通过使用系统存储过程sp_xml_preparedocument的OPENXML函数把XML文档中的数据插入数据库中。其中,系统存储过程sp_......
  • SQLserver 建表语句
    CREATETABLE[dbo].[Dim_Tyc_Supplier_Main_Staff_Info]( [StaffId][nvarchar](255)NOTNULL, [SupplierCode][nvarchar](255)NULL, [Position1][nvarchar](255)NUL......
  • SqlServer入门知识-创建临时表
    https://zhuanlan.zhihu.com/p/562721751平时会直接在正常的库里面直接建表,好像和这个不一样,了解下。平时用时会直接在库里备份数据,然后删掉备份的表。属于数据备份,不是真......
  • 踩坑JSTL标签库:/WEB-INF/jsp/fore/home.jsp (行.: [3], 列: [0]) 无法在web.xml或使用
    Tomcat9及之前使用到的JSTL库:https://files-cdn.cnblogs.com/files/zhangzhixi/jstl.zip最近心血来潮想复习一下JavaWEB,调试JSTL标签的时候出现了一些错误,如标题所示。先......
  • sqlserver数据库 去除字段中空格,换行符,回车符
    使用REPLACE函数:特殊字符在SqlServerManagementStudio查询中显示为空格,但实际不是空格。在C#中能清晰的看到类似:\r\n的字符.​SQL中可以使用Replace函数来对某个字段里的......
  • logback-spring.xml日志配置
    遇到任何事情,可以放弃,但是永远要有面对的勇气引入对应pom依赖<dependency>    <groupId>org.springframework.boot</groupId>    <artifactId>spr......
  • .NET应用开发之SQLServer常见问题分析
    日常我们开发.NET应用时会使用SQLServer数据库,对于SQLServer数据库的日常开发有一些技能和工具,准备给大家分享一下。一、场景1:SQLServer死锁分析 执行以下SQL,启用SQLSe......