`
xiaoer_1982
  • 浏览: 1816441 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

XML与SQL SERVER2005 (六)

阅读更多

XMLSQL 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()     对XMLMDL语句进行更新

nodes() XML拆分形成多行

1XQuery

先解释两个基本概念: 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

3、 分析和计算表达式

计算 Xquery的表达式分为两个阶段:静态上下文、动态上下文

a、静态上下文(查询编译阶段)

这个阶段主要完成如下过程:

l 边界空格

l 初始化前缀和命名空间绑定

l 可类型化列或变量导入XML 架构集合的组件

l 可用转换函数

b、动态上下文(查询执行阶段)

2、 原子化

原子化是提取项的类型化值的进程。可隐式或非隐式进行的。还是举几个例子吧

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 行受影响)

*/

3、 有效的boolean

个人感觉也没什么复杂的,有时的点绕人而已,先来个简单的例子:

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应用开发.iso

    SQL Server 2005 XML应用开发.isoSQL Server 2005 XML应用开发.iso

    XML导入SQLServer

    XML导入SQLServer工具,配置简单,支持大批量导入到SQLServer。

    SQL Server中读取XML文件的简单做法

    SQL Server 2000使得以XML导出数据变得更加简单,但在SQL Server 2000中导入XML数据并对其进行处理则有些麻烦。文中介绍了SQL Server中读取XML文件的简单方法。有了这种解决办法,对XML文档进行各种处理就成为了可能...

    SQL Server 2005 XML应用开发 光盘

    包括XML数据类型、XQuery语言、FOR XML子句、OPENXML函数、XML模板、updategram模板、XML Bulk Load数据批量处理以及XML Web服务等高级技术,最后以具体实例详细阐述了XML与SQL Server 2005的应用系统开发方法。...

    Sqlserver2005XML优化知识

    sqlserver2005 关于xml字段优化的一些总结。包括select中怎么使用。

    自用 c# 操作 xml 和 sqlserver 的类库

    自用 c# 操作 xml 和 sqlserver 的类库,在用的过程中不断的完善

    SQL Server 2005中XML数据类型的性能优化

    网上整理的文章,该文章深入探讨了有关提升Microsoft® SQL Server™ 2005中XML数据类型的查询和修改操作性能的诸多问题。为了更好的理解本文,您最好事先熟悉SQL Server 2005中有关XML的相关特性。作为背景材料,您...

    Microsoft SQL Server 2005技术内幕: T-SQ程序设计.pdf

    SQL Server 2005微软官方权威参考手册   是Inside Microsoft SQL Server 2005系列书中的第一本,SQL Server类的顶尖之作  全球公认SQL Server 2005经典著作,囊括大量鲜为人知的技术内幕,大师智慧、专家经验尽览...

    XML和SQL Server在分布式集成应用中的研究

    可扩展标记语言XML已成为当今互联网数据描述和交换的标准,也是存储网络数据的主要形式,SQLServer是微软公司领先的数据库产品,SQL Server 2005提供了非常强大的支持XML的功能。该文讨论了XML技术和SQL Server 2005...

    java操作xml和sql server 2008必备包(crimson jdom sqljdbc sqljdbc4)

    java操作xml和sql server 2008必备包 包括:crimson.jar jdom.jar sqljdbc.jar sqljdbc4.jar特此将其打包以方便网友下载使用

    SQL Server 2005课件ppt

    第2章 SQL Server 2005的安装与配置 第3章 SQL Server 2005的常用工具 第4章 管理数据库 第5章 表 第6章 数据操作实例 第7章 视 图 第8章 T-SQL语言 第9章 事 务 与 锁 第10章 索 引 第11章 规 则 第12章 默认值 第...

    SQL Server 2005应用开发技术与典型实例代码

    第9章和第10章介绍SQL Server 2005安全性及SQL Server 2005与XML的关系;第11章~13章介绍SQL Server 2005分析服务、集成服务和报表服务;第14章和第15章以使用ASP开发新闻信息管理系统和使用JSP开发电子商务系统为...

    SQL Server 2005 对Native XML Web 服务的支持

    介绍了SQL Server 2005 对Native XML Web 服务的支持

    SQLServer20052008 XML数据类型操作

    1.列举了常见的C# xml操作 2.列举 常见的SqlServ2008 xml数据操作

    Microsoft SQL Server 2005开发指南

    书中的一些示例和提示详细介绍了如何将SQL Server 2005作为一个多层的数据库平台与Visual Studio 2005一起使用,如何使用SQL CMD创建自定义的管理脚本,以及如何使用SQL Profiler提高性能。. 本书主要内容: ·使用 ...

    SQL Server 2005的XML支持与异常处理

    SQL Server 2005的一组新功能以新的XML数据类型为中心,该数据类型在与SQL Server交互的企业应用程序中管理XML数据方面前进了一大部。现在,XML文档或片段可以存储于XML列、绑定到架构、还可以利用XQuery语法查询。...

    SQL Server 2000存储过程与XML编程(第2版).part1

    第1章 简介 第2章 SQL Server环境 第3章 存储过程的设计概念 第4章 T-SQL的基本编程结构 第5章 函数 第6章 复合T-SQL结构:批处理、脚本和事务 第7章 调试和错误处理 ...附录 SQL Server 2000中的T-SQL与XML数据类型

    SQL Server 2005中XML数据类型的性能

    这篇文章深入探讨了有关提升Microsoft® SQL Server™ 2005中XML数据类型的查询和修改操作性能的诸多问题。为了更好的理解本文,您最好事先熟悉SQL Server 2005中有关XML的相关特性。作为背景材料,您可以查阅MSDN...

    Microsoft SQL Server 2005 Express Edition SP3

    与 Microsoft Visual Studio 2005 集成之后,SQL Server Express 可以轻松的开发功能强大且安全的数据驱动应用程序,并允许快速部署这些应用程序。SQL Server Express 可以根据协议重新进行发布,并可作为客户端...

    SQL Server 2005数据库课件PPT

    索 引 第11章 规 则 第12章 默认值 第13章 存 储 过 程 第14章 触 发器 第15章 SQL Server 2005的安全性 第16章 备份与恢复 第17章 XML 第18章 SQL Server分析服务 第19章 SQL Server...

Global site tag (gtag.js) - Google Analytics