您现在的位置: 万盛学电脑网 >> 程序编程 >> 数据库 >> sql server教程 >> 正文

新版本突显原生 XML 类型和高级数据处理的优势

作者:佚名    责任编辑:admin    更新时间:2022-06-22

本文是根据 Microsoft sql server(代号为“Yukon”)Beta 1 撰写的,其中包含的所有信息均可能发生更改。iTbulo .comJuM0yGX

下载本文的代码:XMLinYukon.exe (114KB)iTbulo .comJuM0yGX

XML 数据类型 XML 数据类型 XML 索引 XML 索引 XML 数据类型函数 XML 数据类型函数 XQuery 1.0 — 一种 XML 查询语言 XQuery 1.0 — 一种 XML 查询语言 使用 XQuery 函数 使用 XQuery 函数 SQL Server 中的 XQuery 扩展函数 SQL Server 中的 XQuery 扩展函数 XML DML — 更新 XML 列 XML DML — 更新 XML 列 FOR XML 和 OpenXML 的增强功能 FOR XML 和 OpenXML 的增强功能 原生 Web 服务支持 原生 Web 服务支持 总结 总结 iTbulo .comJuM0yGX

Microsoft SQL Server™ 的下一个版本(代号“Yukon”)吸收了在 SQL Server 2000 中引入的开创性 XML 支持,并为它加入更多创新性功能并且赋予它更好的易用性。Yukon 通过一种新的原生 XML 数据类型为数据库管理系统 (DBMS) 添加了原生 XML 数据存储。这种原生 XML 数据类型的引入,再结合新兴的行业标准 XQuery 语言,将在数据库应用程序开发中引发一场革命。iTbulo .comJuM0yGX

对原生 XML 数据类型的支持是广泛的。它包括基于 XML 架构的验证和基于 XML 的附加约束、基于 XML Infoset 的特殊索引以及使用 XQuery 对 XML 内容对象的查询。除了这个主要的新功能之外,为了获得更好的性能和易用性,还对现有的 SQL Server 2000 XML 功能进行了细微的调整。iTbulo .comJuM0yGX

XML 本身是一种与平台无关的数据表示格式,最初作为文档格式使用。由于 XML 已经获得广泛认可,用户已经设法解决了 XML 解决棘手的业务问题,如数据集成。这就使得作为数据存储格式的 XML 不断发展。XML,像其结构化的对应物一样,有基于 XML 架构定义语言 (XSD) 的自有类型系统。XML 和 XSD 均为推荐级的 W3C 标准。XML 架构定义 XML 文档的格式,正如 SQL Server 架构定义 SQL Server 数据库中对象的布局一样。XML 类型系统相当严密;XSD 几乎可以定义关系型数据库、面向对象的类型系统、半结构化和非结构化的文档格式中的所有构造。(请参见提要栏“标准依从性”。)iTbulo .comJuM0yGX


图 1 用 FOR XML 返回的具有层次结构的 XMLiTbulo .comJuM0yGX

 

XML 数据具有层次结构,并且在业务应用程序中使用的 XML 文档通常由存储在多个关系表中的数据组成。例如,一个 XML 定单文档可能包含客户信息、定单信息以及定单细节信息。在关系型数据库中,通常将这样的信息存储在多个表中。在 SQL Server 2000 中,如果要存储 XML,有两种选择:将整个文档存储在一个文本字段中,或者将文档分解为多个关系表。如果选择文本字段存储,则用 SQL Server 仅能存储和检索数据;而对文档内容的查询则发生在客户端库中。iTbulo .comJuM0yGX


图 2 用 OpenXML 生成表iTbulo .comJuM0yGX

 

在 SQL Server 2000 中,使用 Transact-SQL (T-SQL) SELECT 语句的 FOR XML 扩展,可以查询多个关系表,并可将返回的数据组合成具有层次结构的 XML 文档,如图 1 所示。系统定义的 OPENXML 函数完成文档的分解,如图 2 所示,同时还允许在 XML 和关系数据之间进行分布式关系查询。在 Yukon 中,增强了这种支持,引入了合成、分解以及分布式关系查询。此外,还引入了原生 XML 查询和原生 XML 存储,如图 3 所示。iTbulo .comJuM0yGX


图 3 XML 存储iTbulo .comJuM0yGX

 

XML 数据类型

让我们来看看 XML 数据类型,并分析它与 XML 文档的传统存储方式 — 文本数据类型 — 的区别。包括用作表中的一列、T-SQL 中的一个变量、存储过程或用户定义的函数的参数,或者用作用户定义的函数的返回值。iTbulo .comJuM0yGX

ML 类型与 SQL-100(ANSI SQL 标准的最新版本)定义的相异 (DISTINCT) 类型的概念十分相似,还与基于字符的大对象 (CLOB) 类型 varchar(max) 和 nvarchar(max) 十分相似。尽管 T-SQL INSERT 语句会自动将 VALUES 列表中使用的 varchar 值或 nvarchar 值转换为 XML 数据类型的列值,但必须在该数据类型与 varchar 类型或 nvarchar 类型间进行转换。您无法用 CAST 或 CONVERT 将 XML 类型转换为除 varchar 或 nvarchar 外的任何其他类型。XML 数据类型的两个实例无法进行比较。与 SQL-99 的相异类型类似,XML 类型有自己的方法;这些方法使您能够使用替代的查询语言 XQuery。XML 类型中的数据不遵循关系数据模型,但遵循 XQuery 1.0 和 XPath 2.0 数据模型。iTbulo .comJuM0yGX

使用 XML 数据类型的主要原因是,当定义一个 XML 数据类型列时,则将该列中的数据本身存储在数据库中。在该文件系统上,列不是一个指向 XML 文档的指针。这意味着,XML 数据被包含在备份和还原过程中,受常规的 SQL Server 安全性保护,并参与事务和日志记录。尽管在关系型数据库内部存放 XML 数据可能会让一些关系模型的纯粹化论者不高兴,但这意味着基于管理、可靠性以及控制等原因而将数据存储在了单个库中。iTbulo .comJuM0yGX

下面是一个在表中使用 XML 类型的示例。该表以 XML 格式存储发票文档。iTbulo .comJuM0yGX

CREATE TABLE invoices (

id  INTEGER IDENTITY PRIMARY KEY,

xmlinvoice XML)

请注意,无法将 XML 列本身用作主键。这是因为无法直接比较 XML 数据类型的实例,尽管它们能包含 NULL 值(且能够测试是否为 NULL 值)。虽然不难对 XML 数据执行字符串比较,但是在数据级执行比较的难度将会增加一个数量级。例如,下面的两个 XML 文档在数据上等效,但在词法上却毫无等效性可言:iTbulo .comJuM0yGX

<!-- These two documents are equivalent -->

<doc1>

<row au_id="111-11-1111"/>

</doc1>

<doc1>

<row au_id='111-11-1111'>