XML与SQL SERVER2005 (六)
------------------------------------------------------------------------
-- Author : HappyFlyStone
-- Date : 2009-09-11
-- Version: Microsoft SQL Server 2005 - 9.00.2047.00 (Intel X86)
-- Apr 14 2006 01:12:25
-- Copyright (c) 1988-2005 Microsoft Corporation
-- Enterprise Edition on Windows NT 5.2 (Build 3790: Service Pack 2)
--
-- 本文探讨 SQL Server 2005 中内置的 XML 支持.
-- 第六篇旨在对XQuery 的基础知识作简要说明。
-- 本文来自happyflystone -CSDN博客,
-- 转载请标明出处:http://blog.csdn.net/happyflystone
------------------------------------------------------------------------
Transact-SQL 支持用于查询 xml 数据类型的 XQuery 语言的子集。XQuery 是一种可以查询结构化或半结构化 XML 数据的语言。由于 SQL Server 2005 Database Engine中提供 xml 数据类型支持,因此可以将文档存储在数据库中,然后使用 XQuery 进行查询。
XQuery 基于现有的 XPath 查询语言,并支持更好的迭代、更好的排序结果以及构造必需的 XML 的功能。XQuery 在 XQuery 数据模型上运行。此模型是 XML 文档以及可能为类型化也可能为非类型化的 XQuery 结果的抽象概念。类型信息基于 W3C XML 架构语言所提供的类型。如果没有可用的类型化信息,XQuery 将按照非类型化处理数据。这与 XPath 1.0 版处理 XML 的方式相似。
若要查询 xml 类型的变量或列中存储的 XML 实例,可以使用 xml 数据类型方法(下表1,不作主要说明,这个以后单独再讲)。例如,可以声明一个 xml 类型的变量,然后使用 xml 数据类型的 query() 方法来查询此变量。
表1
query() 对XML实例进行查询
values() 对XML实例检索SQL类型的值
exists() 非空性检测
modify() 对XML的MDL语句进行更新
nodes() 对XML拆分形成多行
1、XQuery
先解释两个基本概念: Sequence 和 Qnames
Sequence:序列,是XML中的一系列 XML 节点和 XSD 原子类型的实例组成。
Eg:
DECLARE @x xml
SET @x = ''
SELECT @x.query('<a>flystone</a>,<b>flystone</b>')
SELECT @x.query('"fly"," stone"')
SELECT @x.query('<a>{1+2}</a>')
/*
-------------------
<a>flystone</a><b>flystone</b>
(1 行受影响)
----------------
fly stone
(1 行受影响)
--------------
<a>3</a>
(1 行受影响)
*/
Qname: XQuery 中的每个标识符都是一个 QName。QName 由一个命名空间前缀和一个本地名称组成。下面我们举一个不带前缀的例子:
DECLARE @x xml
SET @x = '<root><name>flystone1</name><name>flystone2</name></root>'
SELECT @x.query('//root/name')
/*
-----------------
<name>flystone1</name><name>flystone2</name>
(1 行受影响)
*/
//root/name 即是表达式,在这个表达式中,root
和 name
是 QNames。
2、预定义命名空间
前缀 URI
xs http://www.w3.org/2001/xmlxchema
xsi http://www.w3.org/2001/xmlschema-instance
xdt http://www.w3.org/2004/07/xpath-datetypes
fn http://www.w3.org/2004/07/xpath-functions
无 urn:schemas-microsoft-com:xml_sql
sqltypes http://schemas.microsoft.com/sqlserver/2004/sqltypes
xml http://www.w3.org/xml/1998/namespace
无 http://schemas.imcrosoft.com/sqlserver/2004/soap
计算 Xquery的表达式分为两个阶段:静态上下文、动态上下文
a、静态上下文(查询编译阶段)
l 边界空格
l 初始化前缀和命名空间绑定
l 可类型化列或变量导入XML 架构集合的组件
l 可用转换函数
原子化是提取项的类型化值的进程。可隐式或非隐式进行的。还是举几个例子吧
DECLARE @x xml
SET @x = '
<root>
<name count="1">flystone1</name>
<name count="5">flystone2</name>
</root>'
SELECT @x.query('sum(//root/name/@count)')
SELECT @x.query('sum(data(//root/name/@count))')
SET @x = '
<root>
<name count="1">1</name>
<name count="5">2</name>
</root>'
SELECT @x.query('sum(//root/name)')
SELECT @x.query('sum(data(//root/name))')
/*
-----------------
6
(1 行受影响)
-----------------
6
(1 行受影响)
-----------------
3
(1 行受影响)
-----------------
3
(1 行受影响)
*/
XQuery 函数属于 http://www.w3.org/2004/07/xpath-functions 命名空间。W3C 规范使用“fn:”命名空间前缀来说明这些函数。使用这些函数时,不必显式指定“fn:”命名空间前缀。由于这个原因,也为了提高可读性,此文档中通常不使用命名空间前缀。相关的函数我们可以查阅:
ms-help://MS.SQLCC.v9/MS.SQLSVR.v9.zh-CHS/udb9/html/8df0877d-a03f-4ca9-b84e-908c4bb42b5e.htm
我们仅用几个例子来说明一下,
ceiling()这个函数再熟悉不过了,取不小于当前数的最小整数(语句中有FLWOR,这个以后再说)。
DECLARE @x xml
SET @x = '
<root>
<name count="1.9">flystone1</name>
<name count="1.2">flystone2</name>
</root>'
SELECT @x.query('
for $i in //root/name
return
<name count="{ceiling($i/@count)}">
{ $i/node() }
</name>
')
/*
-----------------------------------------------------------------
<name count="2">flystone1</name><name count="2">flystone2</name>
(1 行受影响)
*/
最后用两个SQL Server XQuery 扩展函数的个例子:
DECLARE @x table(id int,col xml)
insert @x select 1,'flystone1'
insert @x select 2,'flystone2'
SELECT id,col.query('
<col id="{sql:column("id")}">{/node()}
</col>') as col
from @x
/*
id col
----------- -----------------
1 <col id="1">flystone1 <col/>
2 <col id="2">flystone2 <col/>
(2 行受影响)
*/
declare @i int,@x xml
set @i = 21000
set @x = '
<root>
<name>flystone1</name>
<name>flystone2</name>
</root>'
select @x.query('
for $i in //root/name
return
<name postcode="{sql:variable("@i")}">
{$i/node()}
</name>
')
/*
----------------------------------------------------------
<name postcode="21000">flystone1</name><name postcode="21000">flystone2</name>
(1 行受影响)
*/
个人感觉也没什么复杂的,有时的点绕人而已,先来个简单的例子:
DECLARE @x XML
SET @x = '<b/>'
SELECT @x.query('if (/a[1]) then "true" else "false"')
SELECT @x.query('if (/b[1]) then "true" else "false"')
/*
-----------
false
(1 行受影响)
-----------
true
(1 行受影响)
*/
再来一些有趣的:
DECLARE @x table(id int,col xml)
insert @x select 1,'<name sex="男"><a><b/><c>flystone1</c></a></name>'
insert @x select 2,'<name sex="女"><a>flystone2</a></name>'
SELECT id,col.query('
<col id="{sql:column("id")}">{/node()}
</col>') as col
from @x
where col.exist('/name[not(/name/a/*)]') = 0
/*
id col
----------- --------------------------------------------------------
1 <col id="1"><name sex="男"><a><b /><c>flystone1</c></a></name></col>
(1 行受影响)
la
分享到:
相关推荐
SQL Server 2005 XML应用开发.isoSQL Server 2005 XML应用开发.iso
XML导入SQLServer工具,配置简单,支持大批量导入到SQLServer。
SQL Server 2000使得以XML导出数据变得更加简单,但在SQL Server 2000中导入XML数据并对其进行处理则有些麻烦。文中介绍了SQL Server中读取XML文件的简单方法。有了这种解决办法,对XML文档进行各种处理就成为了可能...
包括XML数据类型、XQuery语言、FOR XML子句、OPENXML函数、XML模板、updategram模板、XML Bulk Load数据批量处理以及XML Web服务等高级技术,最后以具体实例详细阐述了XML与SQL Server 2005的应用系统开发方法。...
sqlserver2005 关于xml字段优化的一些总结。包括select中怎么使用。
自用 c# 操作 xml 和 sqlserver 的类库,在用的过程中不断的完善
网上整理的文章,该文章深入探讨了有关提升Microsoft® SQL Server™ 2005中XML数据类型的查询和修改操作性能的诸多问题。为了更好的理解本文,您最好事先熟悉SQL Server 2005中有关XML的相关特性。作为背景材料,您...
SQL Server 2005微软官方权威参考手册 是Inside Microsoft SQL Server 2005系列书中的第一本,SQL Server类的顶尖之作 全球公认SQL Server 2005经典著作,囊括大量鲜为人知的技术内幕,大师智慧、专家经验尽览...
可扩展标记语言XML已成为当今互联网数据描述和交换的标准,也是存储网络数据的主要形式,SQLServer是微软公司领先的数据库产品,SQL Server 2005提供了非常强大的支持XML的功能。该文讨论了XML技术和SQL Server 2005...
java操作xml和sql server 2008必备包 包括:crimson.jar jdom.jar sqljdbc.jar sqljdbc4.jar特此将其打包以方便网友下载使用
第2章 SQL Server 2005的安装与配置 第3章 SQL Server 2005的常用工具 第4章 管理数据库 第5章 表 第6章 数据操作实例 第7章 视 图 第8章 T-SQL语言 第9章 事 务 与 锁 第10章 索 引 第11章 规 则 第12章 默认值 第...
第9章和第10章介绍SQL Server 2005安全性及SQL Server 2005与XML的关系;第11章~13章介绍SQL Server 2005分析服务、集成服务和报表服务;第14章和第15章以使用ASP开发新闻信息管理系统和使用JSP开发电子商务系统为...
介绍了SQL Server 2005 对Native XML Web 服务的支持
1.列举了常见的C# xml操作 2.列举 常见的SqlServ2008 xml数据操作
书中的一些示例和提示详细介绍了如何将SQL Server 2005作为一个多层的数据库平台与Visual Studio 2005一起使用,如何使用SQL CMD创建自定义的管理脚本,以及如何使用SQL Profiler提高性能。. 本书主要内容: ·使用 ...
SQL Server 2005的一组新功能以新的XML数据类型为中心,该数据类型在与SQL Server交互的企业应用程序中管理XML数据方面前进了一大部。现在,XML文档或片段可以存储于XML列、绑定到架构、还可以利用XQuery语法查询。...
第1章 简介 第2章 SQL Server环境 第3章 存储过程的设计概念 第4章 T-SQL的基本编程结构 第5章 函数 第6章 复合T-SQL结构:批处理、脚本和事务 第7章 调试和错误处理 ...附录 SQL Server 2000中的T-SQL与XML数据类型
这篇文章深入探讨了有关提升Microsoft® SQL Server™ 2005中XML数据类型的查询和修改操作性能的诸多问题。为了更好的理解本文,您最好事先熟悉SQL Server 2005中有关XML的相关特性。作为背景材料,您可以查阅MSDN...
与 Microsoft Visual Studio 2005 集成之后,SQL Server Express 可以轻松的开发功能强大且安全的数据驱动应用程序,并允许快速部署这些应用程序。SQL Server Express 可以根据协议重新进行发布,并可作为客户端...
索 引 第11章 规 则 第12章 默认值 第13章 存 储 过 程 第14章 触 发器 第15章 SQL Server 2005的安全性 第16章 备份与恢复 第17章 XML 第18章 SQL Server分析服务 第19章 SQL Server...