Sql Server.2005 XML体验
一 XML列与XML变量
1. 创建一个带XML列的表
Create table dbo.XmlTest(XmlTestID int,XmlTestName varchar(50),XmlTestMemo XML)
2. 往XML表里插入数据
Insert into dbo.XmlTest values(100,'Name1','<ROOT><XmlTest>300,zhuhui street, Suzhou </XmlTest></ROOT>')
插入一个非法的XML,系统将会报错:
Insert into dbo.XmlTest values(1,' Name1','<ROOT><XmlTest>300,zhuhui street,Suzhou ')
消息9400,级别16,状态1,第1 行
XML 分析: 行1,字符41,意外的输入结尾
3 创建XML变量
Declare @xml xml
二 无类型与类型化XML
无类型xml
即xml文档不和任何模式关联,能以任何形式存储. 当我们向一个xml列插入数据时,应该有一个检查去判断插入的数据是否符合xml规范.
类型化
xml 将xml列与xml模式相关联,优点是 sql server会自动用模式来验证xml的有效性, xml占用的存储空间少,广域元素和属性的类型信息都由模式提供.
Xml模式
1. xml的模式须先存在库里,然后创建xml数据类型时提供schema用于对照数据格式,这就是类型化的xml
xml模式可以用下面的方法定义
CREATE XML SCHEMA COLLECTION [ <relational_schema>. ]sql_identifier AS Expression
· Schema名称,未定义的话,就用缺省的schema
· xml schema集合的sql标识
· 表达式,是字符串常量或变量,可以是如下类型 varchar, varbinary, nvarchar, nvarbinary, or xml type.
示例创建xml模式集合
CREATE XML SCHEMA COLLECTION Xmltestschema AS '
<schema xmlns="http://www.w3.org/2001/XMLSchema">
<element name="root">
<complexType>
<sequence>
<element name="StreetName" type="string"/>
<element name="Company" type="string"/>
</sequence>
</complexType>
</element>
</schema>'
xml schema归档后,可通过xml_schema_namespace函数取的xml 数据类型实例
例
SELECT xml_schema_namespace(N'dbo',N'Xmltestschema')