SQLServer2005的XML数据类型之基础篇
时间:2021-07-01 10:21:17
帮助过:34人阅读
一、 引言 如今,在SQL Server 2005中,XML成为第一流的 数据 类型 。借助于基于XML模式的强 类型 化支持和基于服务器端的XML 数据 校验功能,现在,开发者可以对存储的XML文档进行轻松地远程修改。 作为 数据 库开发者,许多人都必须大量地涉及XML。 如今,
一、 引言 如今,在SQL Server 2005中,XML成为第一流的
数据类型。借助于基于XML模式的强
类型化支持和基于服务器端的XML
数据校验功能,现在,开发者可以对存储的XML文档进行轻松地远程修改。
作为
数据库开发者,许多人都必须大量地涉及XML。
如今,在SQL Server 2005中,你能以一种新的
数据类型的形式把XML存储在
数据库中。
事实上,在SQL Server 2000中就已经包括了一些XML特征。其中,最关键的特征是使用FOR XML语句以XML形式返回结果。SQL Server 2005的功能则明显不同。在SQL Server 2005中,XML是一种真正的
数据类型;这意味着,你可以使用XML作为表和视图中的列,XML可以用于T-SQL语句中或作为存储过程的参数。现在,你可以直接在
数据库中存储、查询和管理XML文件。
更重要的是,现在你还能规定你的XML必须遵从的模式。
在SQL Server 2005中,除了提供机制以校验你的
数据库中的XML
类型之外,它还允许你描述要被存储的复杂
数据类型并且提供一个引擎来强制施加这些规则。
二、 使用XML数据类型 其实,XML
数据类型与SQL Server中的其它
数据类型并不存在根本的区别。你可以把它用在使用任何普通SQL
数据类型的地方。例如,下列语句创建一个XML变量并用一个XML填充它:
DECLARE @doc xml SELECT @doc = '<Team name="Braves" />' |
另外,你还可以使用一个查询和SQL Server的FOR XML语法来填充一个XML变量:
SELECT @doc = (SELECT * FROM Person.Contact FOR XML AUTO) |
XML
数据类型不仅可以作为变量使用,也可以应用于表列中。你还能分配缺省值并且支持NOT NULL约束:
CREATE TABLE Team ( TeamID int identity not null, TeamDoc xml DEFAULT '<Team />' NOT NULL ) |
注意:SQL Server 2005的XML功能与SQL Server 2000中具有明显的不同。
把XML
数据插入到表格中只需要用字符串形式的XML指定即可。
下列示例插入一组记录:
INSERT INTO Team (TeamDoc) VALUES (' <Team name="Braves"> <Players> <Pitcher name="John Smoltz" role="Closer"/> </Players> </Team>'); INSERT INTO Team (TeamDoc) VALUES (' <Team name="Red Sox"> <Players> <Pitcher name="Petro Martinez" role="Starter"/> </Players> </Team>'); |
当在SQL Server 2005中创建XML的实例时,唯一的转换是从一个字符串转换成一个XML
类型。同样,沿着相反的方向,你只可以把XML
类型转换成一个字符串
类型。在text和ntext
类型之间转换是不允许的。
三、 XML数据类型的限制 尽管在SQL Server 2005中XML
数据类型就象许多其它
数据类型一样对待,但是还存在一些如何使用它的具体限制。这些限制是:
? XML
类型不能转换成text或ntext
数据类型。
? 除了string
类型,没有其它
数据类型能够转换成XML。
? XML列不能应用于GROUP BY语句中。
? 分布式局部(partitioned)视图不能包含XML
数据类型。
? sql_variant实例的使用不能把XML作为一种子
类型。
? XML列不能成为主键或外键的一部分。
? XML列不能指定为唯一的。
? COLLATE子句不能被使用在XML列上。
? XML列不能加入到规则中。
? 唯一可应用于XML列的内置标量函数是ISNULL和COALESCE。没有任何其它内置标量函数支持使用XML
类型。
? 表中最多只能拥有32个XML列。
? 具有XML列的表不能有一个超过15列的主键。
? 具有XML列的表不能有一个timestamp
数据类型作为它们的主键的一部分。
? 存储在
数据库中的XML仅支持128级的层次。