SQL SERVER中XML查询:FOR XML指定PATH

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查询就所有介绍完成。

  1. SQL SERVER中XML查询:FOR XML指定RAW
  2. SQL SERVER中XML查询:FOR XML指定AUTO
  3. SQL SERVER中XML查询:FOR XML指定EXPLICIT
  4. SQL SERVER中XML查询:FOR XML指定PATH
  5. 关于XML类型,请參考:http://blog.csdn.net/leewhoee/article/details/8571286
  6. 关于XML索引,请參考:http://blog.csdn.net/leewhoee/article/details/8579743

时间: 2024-10-05 00:12:32

SQL SERVER中XML查询:FOR XML指定PATH的相关文章

SQL Server中的查询

      本博文简单介绍一下SQL Server中常用的几类查询及相关使用的方法.       一.ExecuteScalar方法获取单一值       ExecuteScalar方法是SqlCommand类的方法之一,执行查询,并返回查询所返回的结果集中的第一行第一列.        class Program { static void Main(string[] args) { string strCon = "Data Source=192.168.24.193;Initial Cat

sql server中分布式查询随笔(链接服务器(sp_addlinkedserver)和远程登录映射(sp_addlinkedsrvlogin)使用小总结)

由于业务逻辑的多样性,经常得在sql server中查询不同数据库中数据,这就产生了分布式查询的需求 现我将开发中遇到的几种查询总结如下: 1.access版本 --建立连接服务器 EXEC sp_addlinkedserver --要创建的链接服务器名称  'ai',             --产品名称               'access',     --OLE DB 字符 'Microsoft.Jet.OLEDB.4.0',  --数据源 --格式: -- 盘符:\路径\文件名 -

SQL Server中自定义函数:用指定的分隔符号分割字符串

2014-11-13 微软SQL Server数据库中包含了很多内置的函数,入下图: 它们用于处理日期.数学.元数据.字符串等. 其中最为常用的就是处理字符串,里面包含了CharIndex()等函数,非常方便使用. 但是对于 特殊字符串的处理,比如:ISBN号 '978-7-5007-7234-7',如果想获取第三个与第四个分割符号之间的数字, 那么SQL 内置函数无法直接做到.这时就需要自定义函数.下面自定义三个函数,用于处理特殊的字符串. 一.按指定符号分割字符串,返回分割后的元素个数 1

【转载】SQL Server中查询CPU占用高的SQL语句

本文导读:触发器造成死锁.作业多且频繁.中间表的大量使用.游标的大量使用.索引的设计不合理.事务操作频繁.SQL语句设计不合理,都会造成查询效率低下.影响服务器性能的发挥.我们可以使用sql server自带的性能分析追踪工具sql profiler分析数据库设计所产生问题的来源,进行有针对性的处理:下面介绍SQL Server中如何查询CPU占用高的SQL语句 SQL Server中查询CPU占用高的情况,会用到sys.sysprocesses ,dm_exec_sessions ,dm_ex

SQL SERVER中对XML进行操作

一.前言 SQL Server 2005 引入了一种称为 XML 的本机数据类型.用户可以创建这样的表,它在关系列之外还有一个或多个 XML 类型的列:此外,还允许带有变量和参数.为了更好地支持 XML 模型特征(例如文档顺序和递归结构),XML 值以内部格式存储为大型二进制对象 (BLOB). 用户将一个XML数据存入数据库的时候,可以使用这个XML的字符串,SQL Server会自动的将这个字符串转化为XML类型,并存储到数据库中. 随着SQL Server 对XML字段的支持,相应的,T-

【SQL Server数据迁移】64位的机器:SQL Server中查询ORACLE的数据

从SQL Server中查询ORACLE中的数据,可以在SQL Server中创建到ORACLE的链接服务器来实现的,但是根据32位 .64位的机器和软件,需要用不同的驱动程序来实现. 在64位的机器上,通过访问接口:OracleProvide for OLE DB,来实现. 1.机器环境和软件环境 操作系统是:windows 7旗舰版 64位,SQL Server 20008R2  64  位,Oracle 11g 11.2.0.1.0   64 位. 2.ORACLE环境的设置 连接orac

在SQL Server的子查询、视图、内联函数等数据库对象中,不应该单独使用ORDER BY语句

我们知道在SQL语句中,ORDER BY语句可以用来排序.但是在SQL Server中,如果我们在子查询.视图.内联函数等数据库对象中单独使用ORDER BY语句是不允许的,来看下面的SQL语句: SELECT * FROM ( SELECT [ID],[Code],[Name],[Age],[Sex],[Class] FROM [dbo].[Student] ORDER BY [ID] DESC ) AS T_Student 执行该语句,SQL Server会报错,错误信息如下: The OR

Microsoft SQL Server中条件字段是Nvarchar类型的,条件有中文的无法查询的原因及处理方法

条件中带的是中文无法查询出,因为字段sender_su_name是nvarchar类型的,需要前面接个N SELECT * FROM [test].[dbo].[Ship_User_Email]  WHERE [sender_su_name]=N'奖励' 为什么要带N如下解释: 使用 Unicode 数据 Unicode 标准为全球商业领域中广泛使用的大部分字符定义了一个单一编码方案.所有的计算机都用单一的 Unicode 标准 Unicode 数据中的位模式一致地翻译成字符.这保证了同一个位模

SQL Server中查询用户的对象权限和角色的方法

--SQL Server中查询用户的对象权限和角色的方法 -- 查询用户的object权限 exec sp_helprotect NULL, 'sa' -- 查询用户拥有的role exec sp_helpuser 'public' -- 查询哪些用户拥有指定的系统role exec sp_helpsrvrolemember 'sysadmin' -- 可查询嵌套role WITH tree_roles as ( SELECT role_principal_id, member_principa