SQL Server 2005 中的XML数据类型
来源:互联网 发布:猴博士爱讲课知乎 编辑:程序博客网 时间:2024/05/16 08:49
在SQL Server 2005中,对XML的支持得到了很好的加强。最重要的一点就是,微软在SQL Server 2005中提供了一个新的数据类型,即XML数据类型,从此告别了用关系型数据来模拟XML数据的历史。之后XML数据就可以直接保存到数据表的一个字段中。
XML数据类型是一专门于保存和操作XML的数据类型。它是以BLOB的二进制形式保存的,一个XML类型字段可以保存2GB的XML代码,层次可达 128层。此外,XML数据类型还有检验XML数据完整性的功能,比以前用text类型保存XML数据方便得多。
例如,下列代码在school数据库中创建了一个数据表books,此数据表中包含一个带有XML类型的字段xmlCol,并插入了一条记录。
USE school CREATE TABLE books (id INT PRIMARY KEY,xmlCol XML NOT NULL) GO INSERT INTO books VALUES (1, '<book type="computer" publicationdate="2008" ISBN="0-7356-1588-2"> <title>c#</title> <author> <first-name>sheng</first-name> <last-name>bin</last-name> </author> <author> <first-name>gengxin</first-name> <last-name>sun</last-name> </author> <price>35.99</price> </book>')
在第2行中使用CREATE TABLE命令创建一个数据表,其中第2个字段是XML类型的。在第4行的INSERT语句中对应该字段的是一个XML文档。
通过上述代码可以看出,使用 SQL Server 2005 中的新 XML数据类型xmlCol,可以很方便地向数据表中插入XML文档数据。
SQL Server 2005 中的新 XML数据类型还具有以下功能。
● 创建既包含普通关系列,又包含有XML类型列的表。
● 通过与XML集合关联,创建有类型的XML列类型。
● 对涉及其他XML或非XML类型列的XML列进行限制。
● 创建可用于存储XML数据类型实例的XML类型的变量。
● 为存储过程或用户定义的函数创建XML类型的参数。
● 从用户定义的函数中返回XML类型值。
● 运行XQuery子集,在XML结构内查询并转换XML数据。
● 根据XML类型的列创建计算列。
● 为XML类型的列创建XML索引,以提高查询性能。
● 使用XML DML对XML实例进行元素级的插入、删除和更新操作。
● 将XML类型数据的实例传递到sp_xml_preparedocument,为XML文档在内存中的表示作准备。
● 使用XQuery和XML DML编写包含关系和XML列的跨域查询。
● 使用CAST和CONVERT,分别将XML类型转换为varchar和nvarchar类型。
● 使用CAST或CONVERT,将字符串数据类型(如varchar、text、varbinary 和image)转换为XML类型。
XML类型还提供了5个用于查找和更新的方法,分别是query、exist、value、nodes和modify方法。调用这5个方法时必须全部小写,而且全部都使用XQuery语句来定位,用来定位的XQuery语句将以字符串的形式作为方法的第一个参数。
注意:
XQuery 是用于 XML数据查询的语言;其对 XML 的作用类似 SQL 对数据库的作用;XQuery 被构建在XPath 表达式之上,并由所有主要的数据库引擎支持(IBM、Oracle、Microsoft等);XQuery 是 W3C 标准。XQuery 1.0 和 XPath 2.0 共享相同的数据模型,并支持相同的函数和运算符。
下面详细介绍XML类型提供的这5个用于查找和更新的方法。
1) query方法
可以提取 XML文档的片段,该方法接受 XQuery 表达式作为参数,并返回无类型的XML实例。例如,在查询窗口中输入以下代码:
DECLARE @x xml SET @x = '<ROOT><teacher_name>betty</teacher_name></ROOT>' SELECT @x.query('/ROOT/teacher_name')
结果中显示的XML文档的片段是ROOT元素下的teacher_name元素及其内容。
2) value方法
该方法通过指定XQuery表达式以及需要返回的SQL 类型,可以从 XML实例中提取标量值。由于value方法只能返回一个值,因此它执行的XQuery语句必须要能确定到一个值上,否则就会报错。例如,在查询窗口中输入以下代码:
SELECT xmlCol.value('(/book/author)[2]', 'nvarchar(max)') FROM books
结果中显示的是xmlCol列中book元素中的第二个author子元素中的内容。
3) exist方法该方法用于确定 XML 实例中是否存在某一元素,如果存在则返回1,否则返回0。例如,在查询窗口中输入以下代码:
SELECT xmlCol.exist('/book/title') FROM books
执行结果将返回1,因为xmlCol列中,book元素中存在名为title的子元素。
4) nodes方法该方法用于从XML实例片断产生一个新的XML实例。nodes方法和query方法的区别在于,query方法返回的XML片断是作为字符串返回的,而nodes返回的XML片断则是XML类型的,然后程序还可以对这个返回的XML类型进行进一步的操作。nodes的使用比较复杂,往往要与CROSS APPLY连用。例如,在查询窗口中输入以下代码:
SELECT nref.query('.') LastName FROM books CROSS APPLY xmlCol.nodes('//first-name') AS R(nref)
5) modify方法
该方法可以对 XML数据进行更新。通过XQuery中添加的insert、delete和update关键字提供了对XML DML的支持,使用 insert、delete和update关键字可以分别插入、删除和更新一个或多个节点。例如,在查询窗口中输入以下代码:
UPDATE books SET xmlCol.modify( 'insert <section num="1"> <content>Background</content> </section> after (/book/title)[1]') where id = 1
在该段代码的第1行使用UPDATE语句修改books表中xmlCol类型的字段,在第2~7行使用insert
<book type="computer" publicationdate="2008" ISBN="0-7356-1588-2"> <title>c#</title> <author> <first-name>sheng</first-name> <last-name>bin</last-name> </author> <author> <first-name>gengxin</first-name> <last-name>sun</last-name> </author> <price>35.99</price> </book>
执行此段代码后,在id列值为1的记录的xmlCol列中添加元素section,此元素将添加在title元素的下面。更改后的xmlCol列的内容将如下所示。
<book type="computer" publicationdate="2008" ISBN="0-7356-1588-2"> <title>c#</title> <section num="1"> <content>Background</content> </section> <author> <first-name>sheng</first-name> <last-name>bin</last-name> </author> <author> <first-name>gengxin</first-name> <last-name>sun</last-name> </author> <price>35.99</price> </book>通过上述的讲解可以看出,XML数据类型提供了一种在服务器上存储 XML数据的简单直观的方法,同时还保留了文档顺序和文档结构。这一点特别适用于文档顺序和文档结构非常重要的文档。另外,XML数据类型还能够对XML数据进行深入的查询和修改操作。在SQL Server 2005 之前,没有办法在数据库内部存储XML。因此,如果要修改或查询XML数据,必须从 nvarchar或text 列中加载数据,由字符串创建XML文档,然后才能进行修改。将修改过的数据写回数据库的步骤与此类似。而现在使用XML数据类型,这些步骤就变得非常简单。由于 XML 类型的数据存储在数据库中,它还具有很多数据库的功能,如备份和恢复、SQL Server 安全性、事务、日志等。因此,将XML文档存储为 XML数据类型非常适用于以下情况。
● 应用程序需要保留XML文档的信息集内容。
● 应用程序需要对XML文档进行元素级的修改和查询操作。
● 应用程序需要创建XML数据类型列的索引,以加快查询处理。
● 应用程序使用各种不同结构的XML文档。
但要注意的是,使用新的XML数据类型时也存在如下限制。
● 不能存储精确的数据副本。
● XML文档的层次最多为128层。
● XML文档的内部二进制表示最大为2GB。
● XML列不能成为主键约束或外键约束的一部分。
● XML列不能作为分组值在group by语句中使用。
● XML不能转换为 text、ntext或image数据类型。
- SQL Server 2005 中的XML数据类型
- SQL Server Yukon 中的XML 数据类型
- SQL Server Yukon 中的XML 数据类型
- SQL Server 2005中的数据类型
- SQL Server XML 数据类型
- SQL server中的数据类型
- SQL SERVER 中的数据类型
- Sql server 中的数据类型
- SQL Server 中的数据类型
- SQL Server 2005 中的数据类型小结
- sql server 中的 DateTime 数据类型
- SQL Server 2008中的数据类型
- SQL Server 2008中的数据类型
- SQL Server 2008中的数据类型
- SQL Server 2008中的数据类型
- MS SQL SERVER 中的数据类型
- SQL SERVER中的布尔数据类型
- sql server 2000 中的数据类型
- 常见排序算法概述
- 浅谈PHP第四弹---递归函数
- PHP 讓 json_encode() 指定回傳格式
- java并发编程实践学习(二)由可重入锁想到的
- 完成一个商品的购买功能
- SQL Server 2005 中的XML数据类型
- 充值系列——充值系统的架构(二)
- 文本消息
- 杂谈
- try catch finally执行顺序
- 【noi2005试题】瑰丽华尔兹 单调队列优化DP
- 无向联通图求割边(桥)字符串+map容器(hdu3849)
- Badboy+JMeter压力测试工具
- 用HttpClient解析HTML时遇到的乱码问题