2024年3月17日发(作者:)
XML和SQL Server集成 创建XML架构集
通过前面的介绍大家应该能够了解,使用XML的最大优势之一就是XML技术
提供了对XML文档进行验证的能力。XSD(XML Schema Definition)定义了一组用于
验证XML文档的数据类型。用户可以按照自己组织和验证数据的需要,使用XSD
为XML文档创建一个XML Schema。这样在日后分析和处理数据时,就可以使用
创建的XML Schema来验证数据的有效性。实际上,失去了XML Schema,XML
将变得毫无意义。
对于标准的XML文档来说,通常的做法是为其创建一个文档来保存那些用于
说明XML文档格式和数据类型的XML Schema。
SQL Server 2008数据库允许用户创建自己的XML Schema,并将它们作为数据
库对象存储在数据库中。SQL Server 2008提供了名为XML Schema Collection(即
XML Schema集)的对象来保存XML Schema。XML Shema Collection中包含着由
XSD定义的XML Schema。
如果将XML Schema集中的指定XML Schema与某一XML类型的字段或变量
进行绑定,那么就可以使用该XML Schema对绑定字段或变量中的XML实例(文档)
进行有效性验证。
1.创建XML架构集合
创建一个XML架构集的语法如下所示:
CREATE XML SCHEMA COLLECTION [
其中相关参数如表6-5所示。
表6-5 相关参数
参数名
relational_schema
Sql_identifer
expression
含义
XML架构集所属的数据库方案名,默认情况下为dbo
XML架构集合的名称
具体的XML架构集合
下面在数据库Book中创建一个名为testXMLSchema的XML架构集合,在【查
询编辑器】中输入下面的Transact-SQL脚本代码:
USE Book
CREATE XML SCHEMA COLLECTION testXMLSchema AS
N'
'
GO
上述Transact-SQL脚本中规定了根元素CategoryInfo及其三个子元素
CategoryID、CategoryName和Description。并且规定了它们的数据类型,即integer(整
型)和string(字符串型),如图6-12所示。
图6-12 执行结果
接下来在【查询编辑器】中继续输入如下的Transact-SQL脚本,创建一个名为
xsd_Categories的数据表:
USE Book
CREATE TABLE xsc_Categories
(
Categories xml (testXMLSchema)
)
GO
该数据表中包含一个名为Categories的XML类型的字段。打开【查询编辑器】,
在其中输入下面的Transact-SQL脚本,向数据表xsc_Categories中插入一条记录:
USE Book
GO
INSERT INTO xsc_Categories (Categories)
VALUES ('
1
candy
chocolate,panocha
')
SELECT * FROM xsc_Categories
单击【执行】按钮,其运行结果如图6-13所示。
图6-13 插入记录
对上面的Transact SQL脚本稍作改动,将
1
更改为
abcd
再次单击【执行】按钮,【查询编辑器】将给出如图6-14所示的警告。
图6-14 错误报告
这是因为子元素CategoryId的值abcd为字符串,无法通过XML架构
testXMLSchema验证的(test XML Schema规定元素CategoryId必须为integer)的结
果。
2.删除XML架构集合
删除XML架构集合的方法非常简单,其语法如下所示:
DROP XML SCHEMA COLLECTION [relational_schema.]sql_identifier
DROP XML SCHEMA COLLECTION中使用的参数与CREATE XML SCHEMA
COLLECTION中使用的参数相同,在此不再赘述。
需要注意的是,如果已将XML架构与某数据表中的XML对象(例如数据表中
的XML字段或变量等)进行了绑定,则需要首先解除这种绑定关系,才能够使用
DROP XML SCHEMA COLLECTION删除该XML架构集。如果想查看XML架构
集是否与某个数据库对象进行了绑定,可右击该XML框架,然后从弹出的快捷菜
单中选择【查看依赖关系】命令,打开【对象依赖关系】对话框,该对话框中显示
了与XML框架集绑定的所有数据库对象。
删除前面创建的架框集testXMLSchema的Transact-SQL语句如下所示:
USE Book
GO
ALTER TABLE xsc_Categories ALTER COLUMN Categories XML
GO
DROP XML SCHEMA COLLECTION testXMLSchema
GO
上述Transact-SQL脚本首先解除架构集testXMLSchema与数据表
xsc_Categories之间的绑定关系(ALTER TABLE xsc_Categories ALTER COLUMN
Categories xml),然后再使用DROP XML SCHEMA COLLECTION删除XML架构
集testXMLSchema。
DROP XML SCHEMA COLLECTION操作是一个事务性操作。换言之,使用回滚(roll
back)操作可以恢复被删除的XML架构信息。
3.修改XML架构集合
修改XML架构集并不是很简单的事,Microsoft也没有为修改XML架构集中
的指定架构提供相应的命令。因此,修改一个架构集实际上就只能先删除该架构集
然后再创建新的架构集。大致需要以下4步。
首先需要解除被修改的XML架构集与数据表之间的绑定;否则无法对一个XML架构
集进行修改。
在解除与数据库对象的绑定之后,可以先删除原有的XML架构集,然后再根据需要创
建一个新的架构集。
如果数据表中已存在记录,还需要首先对相应的记录按照新的XML架构进行更新。
最后才能将指定的字段与更新后的XML架构集进行绑定。
例如,为前面创建的textXMLSchema数据表添加一个子元素。
如果要对前面创建的textXMLSchema进行修改,为其添加一个子元素Picture,
用于指明该类别产品的图片文件所在的位置,则必须按照下列的步骤顺序才能实现
这一目的。
在【查询编辑器】中输入下列的Transact-SQL脚本:
USE Book
GO
ALTER table xsc_Categories ALTER Column Categories XML
GO
单击【执行】按钮,即可解除xsc_Categories与XML架构之间的绑定关系。接
着在【查询编辑器】中输入下面的Transact-SQL脚本代码:
DROP XML SCHEMA COLLECTION testXMLSchema
GO
单击【执行】按钮,删除前面创建的XML架框testXMLSchema,如果没有第
一步的解除绑定操作,则本步无法删除该XML架构。继续在【查询编辑器】中输
入下面的Transact-SQL脚本:
CREATE XML SCHEMA COLLECTION testXMLSchema AS
N'
'
GO
单击【执行】按钮重新创建一个经过修改的XML架构集,其中添加了一项名
为Picture的子元素,如图6-15所示。
图6-15 执行结果
继续在【查询编辑器】中输入下面的Transact-SQL脚本代码,:
UPDATE xsc_Categories
SET Categories =
'
1
candy
chocolate,panocha
d:
'
GO
对数据表xsc_Categories中原有的一条记录进行修改,使其符合新创建的XML
架构,即为其多添加了一个子元素
图6-16 执行结果
最后在【查询编辑器】中输入下面的Transact-SQL脚本代码:
ALTER table xsc_Categories ALTER Column Categories XML(testXMLSchema)
GO
单击【执行】按钮执行上述脚本。即可将数据表xsc_Categories中的字段
Categories与更新后的XML架构集进行绑定。注意,如果没有在上一步对数据表中
原有的记录进行修改,则无法将更新后的数据集绑定到数据表xsc_Categories中的
Categories字段上。
4.查看XML架构集合
使用Transact SQL语句查看XML架构集合时可以使用以下两种方法。
使用SQL Server 2008提供的系统视图s和_schema_collections。
使用SQL Server 2008提供的系统存储过程xml_schema_namespace。
查看XML架构集合示例的设计过程如下。
在【查询编辑器】中输入下面的Transact-SQL脚本:
USE Book
SELECT SchemaName, testXMLSchema
FROM _schema_collections xsc
JOIN s s ON _id = _id
上述Transact-SQL脚本使用SQL Server 2005自带的视图s和
_schema_collections查看当前数据库中的XML框架集。单击【执行】按钮,
运行上述Transact-SQL脚本,其结果如图6-17所示。
图6-17 执行结果
继续在【查询编辑器】中输入下面的Transact-SQL脚本:
USE Book
GO
SELECT xml_schema_namespace(N'dbo',N'testXMLSchema') 架构集
GO
上述Transact-SQL脚本中使用系统自带的存储过程xml_schema_namespace查
看指定的XML架构集。该存储过程包括两个参数,第一个参数为XML架构集所在
的数据库架构名,第二个参数用于指定要查看的XML架构集名称。单击【执行】
按钮,运行上述Transact-SQL脚本,其结果如图6-18所示。
图6-18 查询结果
单击列出的架构集名,可以进一步查看该架构集中的详细内容。示例XML架
构集testXMLSchema中的结果如图6-19所示。
图6-19 查看架构集中的详细内容
从图6-19中可以看出,该架构集中包含两个主要元素,即AccountInfo和
CategoryInfo。其中CategoryInfo为本章创建的第一个示例XML架构集,而
AccountInfo为后来使用ALTER XML SCHEMA COLLECTION ADD添加的XML架
构集。
除使用Transact-SQL脚本来查看XML架构集之外,使用Microsoft SQL Server
Management Studio同样可以完成XML架构集的管理工作。切换到Microsoft SQL
Server Management Studio的【对象资源管理器】。依次选择【数据库】、Book、【可
编程性】、【类型】、【XML架构集合】节点,即可查看数据库Book中包含的XML
架构集,如下图6-20所示。
图6-20 查看数据库Northwind中包含的XML架构集


发布评论