MSDN 查询词:在 SQL Server 中使用 XML
1、XML 数据类型具有五个相关的方法:
query()、value()、exist()、modify()、nodes()
nodes() 方法用于将 XML 类型实例拆分为关系数据,如
declare @x xml
set @x = '<root>
<row id="1"><name>Larry</name></row>
<row id="2"><name>Joe</name></row>
<row id="3" />
</root>'
Select c.query('.') Row From @x.nodes('/root/row') T(c)
返回值为
Row
----------------
<row id="1"><name>Larry</name></row>
<row id="2"><name>Joe</name></row>
<row id="3" />
注意:nodes() 方法返回的行集无法直接使用,只能配合 XML 数据类型方法使用(不包括 modify 方法,因为不能修改返回的行集),另外,也可用于 IsNull 和 Count 函数中。
另外,在 XML 数据类型方法中的表达式是区分大小写的。
2、类型化与非类型化的 XML:所谓类型化的 XML,就是与架构相关联的 XML 文档或片断,将 XML 类型与架构关联的方式如下:
declare @x xml(SchemaCollection)
create table t(
Col1 int,
Col2 xml(SchemaCollection))
SchemaCollection 必须通过T-SQL语句创建或引入:
Create Xml Schema Collection
3、创建 XML 类型的字段时,可以定义字段级和表级的约束,但不能使用 XML 数据类型方法。有一个折衷的办法,就是定义一个函数,然后在函数中使用 XML 数据类型的方法验证,最终在建立约束时使用这个函数。如:
Create Function my_udf(@var xml) returns bit
As Begin
Return @var.exist('/root/@id')
End
建立约束
Create Table T1(
Col1 int primary key,
Col2 xml check(dbo.my_udf(Col2) = 1))
同样,在基于 XML 类型的字段创建计算列时,也不能使用 XML 数据类型方法,解决方法同上。
4、直接处理或生成 XML 文档可使用 OpenXml 和 For Xml 语句(SQL 2000 即支持)。
使用 OpenXml 语句前要执行存储过程 sp_xml_preparedocument,如:
Exec sp_xml_preparedocument @docHandle Output, @xmlDoc;
检索完后应调用 sp_xml_removedocument 释放内存,如:
Exec sp_xml_removedocument @docHandle
上述的 @docHandle 是整型值。
5、XML 实例是作为二进制大对象存储在 XML 类型列中的。若对 XML 实例的查询比较频繁,应为 XML 类型列建立索引。XML 类型列索引分为:主 XML 索引和辅助 XML 索引。辅助索引可分为 path、value 和 property。