SQLSERVER中XML查询:FORXML指定RAW

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

前言

在SQL SERVER中,XML查询可以指定RAW,AUTO,EXPLICIT,PATH。本文用一些实例介绍SQL SERVER中指定RAW的XML查询。

基础FOR XML查询

看实例:

with TestXml
as
(
select 1 as id,'LeeWhoeeUniversity' as name
union all
select 2,'SQLSERVER中XML查询'
union all
select 3 ,'FOR XML'
)
select id,name from testxml for xml raw,type

运行后结果:

<row id="1" name="LeeWhoeeUniversity" />
<row id="2" name="SQLSERVER中XML查询" />
<row id="3" name="FOR XML" />

红色字体type可选,不会影响结果,只是影响数据类型。

指定 ELEMENTS:

with TestXml
as
(
select 1 as id,N'LeeWhoeeUniversity' as name
union all
select 2,N'SQLSERVER中XML查询'
union all
select 3 ,null
)
select id,name from testxml for xml raw,elements

注意,第三行值改为NULL值进行测试。

结果:

<row>
<id>1</id>
<name>LeeWhoeeUniversity</name>
</row>
<row>
<id>2</id>
<name>SQLSERVER中XML查询</name>
</row>
<row>
<id>3</id>
</row>

元素name在第三行没有出现,因为是NULL值。

但是我们可以用XSINIL生成NULL值的name元素。

如:

with TestXml
as
(
select 1 as id,N'LeeWhoeeUniversity' as name
union all
select 2,N'SQLSERVER中XML查询'
union all
select 3 ,null
)
select id,name from testxml for xml raw,elements XSINIL
运行结果:

<row xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<id>1</id>
<name>LeeWhoeeUniversity</name>
</row>
<row xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<id>2</id>
<name>SQLSERVER中XML查询</name>
</row>
<row xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<id>3</id>
<name xsi:nil="true" />
</row>

使用XMLDATA和XMLSCHEMA

XMLDATA返回描述文档结构的 XML-DATA 架构。

如:

with TestXml
as
(
select 1 as id,N'LeeWhoeeUniversity' as name
union all
select 2,N'SQLSERVER中XML查询'
union all
select 3 ,null
)
select id,name from testxml for xml raw,XMLDATA

结果:

<Schema name="Schema2" xmlns="urn:schemas-microsoft-com:xml-data" xmlns:dt="urn:schemas-microsoft-com:datatypes">
<ElementType name="row" content="empty" model="closed">
<AttributeType name="id" dt:type="i4" />
<AttributeType name="name" dt:type="string" />
<attribute type="id" />
<attribute type="name" />
</ElementType>
</Schema>
<row xmlns="x-schema:#Schema2" id="1" name="LeeWhoeeUniversity" />
<row xmlns="x-schema:#Schema2" id="2" name="SQLSERVER中XML查询" />
<row xmlns="x-schema:#Schema2" id="3" />

XML SCHEMA

通过指定 XMLSCHEMA 选项,您可以针对结果请求 XSD 架构:

with TestXml
as
(
select 1 as id,N'LeeWhoeeUniversity' as name
union all
select 2,N'SQLSERVER中XML查询'
union all
select 3 ,null
)
select id,name from testxml for xml raw,XMLSCHEMA
结果:

<xsd:schema targetNamespace="urn:schemas-microsoft-com:sql:SqlRowSet2" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:sqltypes="http://schemas.microsoft.com/sqlserver/2004/sqltypes" elementFormDefault="qualified">
<xsd:import namespace="http://schemas.microsoft.com/sqlserver/2004/sqltypes" schemaLocation="http://schemas.microsoft.com/sqlserver/2004/sqltypes/sqltypes.xsd" />
<xsd:element name="row">
<xsd:complexType>
<xsd:attribute name="id" type="sqltypes:int" use="required" />
<xsd:attribute name="name">
<xsd:simpleType>
<xsd:restriction base="sqltypes:nvarchar" sqltypes:localeId="2052" sqltypes:sqlCompareOptions="IgnoreCase IgnoreKanaType IgnoreWidth">
<xsd:maxLength value="12" />
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<row xmlns="urn:schemas-microsoft-com:sql:SqlRowSet2" id="1" name="LeeWhoeeUniversity" />
<row xmlns="urn:schemas-microsoft-com:sql:SqlRowSet2" id="2" name="SQLSERVER中XML查询" />
<row xmlns="urn:schemas-microsoft-com:sql:SqlRowSet2" id="3" />

您可以将目标命名空间 URI 指定为 FOR XML 中 XMLSCHEMA 的可选参数。

with TestXml
as
(
select 1 as id,N'LeeWhoeeUniversity' as name
union all
select 2,N'SQLSERVER中XML查询'
union all
select 3 ,null
)
select id,name from testxml for xml raw,XMLSCHEMA ('urn:http://blog.csdn.net/lihui_830501')

结果:

<xsd:schema targetNamespace="urn:http://blog.csdn.net/lihui_830501" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:sqltypes="http://schemas.microsoft.com/sqlserver/2004/sqltypes" elementFormDefault="qualified">
<xsd:import namespace="http://schemas.microsoft.com/sqlserver/2004/sqltypes" schemaLocation="http://schemas.microsoft.com/sqlserver/2004/sqltypes/sqltypes.xsd" />
<xsd:element name="row">
<xsd:complexType>
<xsd:attribute name="id" type="sqltypes:int" use="required" />
<xsd:attribute name="name">
<xsd:simpleType>
<xsd:restriction base="sqltypes:nvarchar" sqltypes:localeId="2052" sqltypes:sqlCompareOptions="IgnoreCase IgnoreKanaType IgnoreWidth">
<xsd:maxLength value="12" />
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<row xmlns="urn:http://blog.csdn.net/lihui_830501" id="1" name="LeeWhoeeUniversity" />
<row xmlns="urn:http://blog.csdn.net/lihui_830501" id="2" name="SQLSERVER中XML查询" />
<row xmlns="urn:http://blog.csdn.net/lihui_830501" id="3" />

检索二进制数据

像XMLDATA一样,在SQL中指定BINARY BASE64。

重命名 <row> 元素

with TestXml
as
(
select 1 as id,N'LeeWhoeeUniversity' as name
union all
select 2,N'SQLSERVER中XML查询'
union all
select 3 ,null
)
select id,name from testxml for xml raw ('myrow')

结果:

<myrow id="1" name="LeeWhoeeUniversity" />
<myrow id="2" name="SQLSERVER中XML查询" />
<myrow id="3" />

指定ELEMENTS的情况类同。

为 FOR XML 生成的 XML 指定根元素

with TestXml
as
(
select 1 as id,N'LeeWhoeeUniversity' as name
union all
select 2,N'SQLSERVER中XML查询'
union all
select 3 ,null
)
select id,name from testxml for xml raw,root('myroot')

结果:

<myroot>
<row id="1" name="LeeWhoeeUniversity" />
<row id="2" name="SQLSERVER中XML查询" />
<row id="3" />
</myroot>

查询 XML 类型的列

?

1
2
3
4
5
6
7
8
9
10
11

declare @xml table(xid int,xname varchar(50),xmlcol xml);
insert into @xml select 1,'第一行','<myroot>
  <row id="1" name="LeeWhoeeUniversity" />
  <row id="2" name="SQLSERVER中XML查询" />
  <row id="3" />
</myroot>'
insert into @xml select 2,'第二行','<myroot>
  <row id="4" name="XML数据" />
  <row id="5" name="FOR XML指定RAW" />
</myroot>'
select xid,xname,xmlcol.query('/myroot') from @xml for xml raw

结果:

<row xid="1" xname="第一行">
<myroot>
<row id="1" name="LeeWhoeeUniversity" />
<row id="2" name="SQLSERVER中XML查询" />
<row id="3" />
</myroot>
</row>
<row xid="2" xname="第二行">
<myroot>
<row id="4" name="XML数据" />
<row id="5" name="FOR XML指定RAW" />
</myroot>
</row>

总结

以上对指定RAW的XML查询就介绍完了,下一篇文章将继续用实例介绍SQL SERVER中的XML查询:指定AUTO查询。

时间: 2024-11-05 18:30:24

SQLSERVER中XML查询:FORXML指定RAW的相关文章

SQLSERVER中XML查询:FORXML指定AUTO

SQL SERVER中XML查询:FOR XML指定AUTO  前言 在SQL SERVER中,XML查询可以指定RAW,AUTO,EXPLICIT,PATH.本文用一些实例介绍SQL SERVER中指定AUTO的XML查询. 基础示例 片断1: with TestXml as ( select 1 as id,N'LeeWhoeeUniversity' as name union all select 2,N'DePaul' union all select 3 ,null ) select

SqlServer中模糊查询对于特殊字符的处理方法

今天在处理sql查询的时候遇到了like查询不到的问题,于是对问题进行剖析 问题: select * from v_workflow_rt_task_circulate where Name like '%[admin]请假申请[2017-02-13至2017-02-13]%' 查询不到,但是在数据库中是存在在这一条数据的. 修改后: select * from v_workflow_rt_task_circulate where Name like '%[[]admin]请假申请[[]2017

如何查看SQLSERVER中某个查询用了多少TempDB空间_MsSql

    在SQL Server中,TempDB主要负责供下述三类情况使用: 内部使用(排序.hash join.work table等) 外部使用(临时表,表变量等) 行版本控制(乐观并发控制)       而对于内部使用,一些比较复杂的查询中由于涉及到了大量的并行.排序等操作时就需要大量的内存空间,每一个查询在开始时都会由SQL Server预估需要多少内存,在具体的执行过程中,如果授予的内存不足,则需要将多出来的部分由TempDB处理,这也就是所谓的Spill to TempDB.    

sqlserver中如何查询出连续日期记录的代码_MsSql

有在论坛上看到一帖,<请教查询出连续日期记录的方法>,截图如下: Insus.NET尝试写了程序并做了测试,可以得到预期的结果,SQL代码可参考和学习之用. 复制代码 代码如下: --创建一个临时表,将会存储连续日期的记录 CREATE TABLE #temp (IDD VARCHAR(10),SDATE DATETIME) DECLARE @sD DATETIME --开始日期 DECLARE @eD DATETIME --结束日期 --在记录中,找出开始与结束日期 SELECT @sD =

如何查看SQLSERVER中某个查询用了多少TempDB空间

在SQL Server中,TempDB主要负责供下述三类情况使用: 内部使用(排序.hash join.work table等) 外部使用(临时表,表变量等) 行版本控制(乐观并发控制)       而对于内部使用,一些比较复杂的查询中由于涉及到了大量的并行.排序等操作时就需要大量的内存空间,每一个查询在开始时都会由SQL Server预估需要多少内存,在具体的执行过程中,如果授予的内存不足,则需要将多出来的部分由TempDB处理,这也就是所谓的Spill to TempDB. 通过下述语句可以

sql server-sqlserver中一个查询问题,急需解答!!!

问题描述 sqlserver中一个查询问题,急需解答!!! 解决方案 http://www.oschina.net/question/573517_118821 解决方案二: http://www.cnblogs.com/New-world/archive/2013/05/29/3106127.html 解决方案三: SQLServer常见查询问题SQLServer常见查询问题多年困扰我的一个技术问题,希望这方面的专家指点一下,有关SQLServer并发控制方面的问题

SQLServer · 特性分析 · SQL Server中XML与JSON应用比较

title: SQLServer · 特性分析 · SQL Server中XML与JSON应用比较 author: 石沫 背景 SQL Server是一种强大的数据库引擎,不仅性能卓越,稳定,功能还很强大,SQL Server 2016中已经支持JSON.这让我想到以前工作中经常使用的SQL XML,也对比一下他们几个关键领域的应用方法.这两种SQL特性,在实际的工作中也是常用的功能,特别是JSON在最近发展非常火爆,SQL Server也不落后,很快就在SQL Server2016支持. 广义

Javascript中XML文档的查询与加载

 Document 定义的方法大多数是生产型方法,主要用于创建可以插入文档中的各种类型的节点.常用的 Document 方法有: 方法 描述 createAttribute() 用指定的名字创建新的 Attr 节点. createComment() 用指定的字符串创建新的 Comment 节点. createElement() 用指定的标记名创建新的 Element 节点. createTextNode() 用指定的文本创建新的 TextNode 节点. getElementById() 返回文

vb6 sql instr-vb6环境下,无法使用instr、charindex查询数据库指定字段中特定字符的位置。

问题描述 vb6环境下,无法使用instr.charindex查询数据库指定字段中特定字符的位置. 创建视图,需要查询数据库指定字段特定字符,代码以下: quetn = "create view que_ta AS select max(que_info.test_id) as test_id,sum(case when instr(1, que_category.cate_name, '选择题')>0 then 1 end) as 选择题," & _ "sum