技术开发 频道

在SQL Server中如何与XML交互

现在来分析以上这个例子:

   在定义好了@XmlDocument的XML文档后,然后调用系统程序sp_xml_preparedocument,它表示在XML文档存在内存的时候,允许XML文档作为调用参数。然后就可以调用OPENXML函数。通过指定为 /ROOT/Customer 的标识要处理的 节点,读取CustomerID和ContactName的值,然后就调用系统程序sp_xml_removedocument删除SQL Server 服务器内存中的XML数据。

   但在调用OPENXML函数时要注意内存的使用情况。系统程序sp_xml_preparedocument 的返回值是指向内存中XML文档的句柄。所以不要使用OPENXML加载较大的XML文档,否则可能会造成服务器的内存溢出。

3) 针对 xml 数据类型的 XQuery

   XQuery 是一种可以查询结构化或半结构化 XML 数据的语言。由于 SQL Server 2005 数据库引擎中提供 xml 数据类型支持,因此可以将文档存储在数据库中,然后使用 XQuery 进行查询。

   在此我们只举一个简单的例子:
 

DECLARE @x xml
SET @x = '<Myroot><Element1>First</Element1><Element2>Second</Element2>
</Myroot>'
SELECT @x.query('/Myroot')

 
   输出的结果如下:
 

<Myroot>
<Element1>First</Element1>
<Element2>Second</Element2>
</Myroot>

DECLARE @x xml
SET @x = '<Myroot><Element1>First</Element1><Element2>Second</Element2>
</Myroot>'
SELECT @x.query('/Myroot/Element1')

 
   输出的结果如下:
 

<Element1>First</Element1>

   可以看到,它通过读取XML文档的节点,而输出对应的值。

   XQuery功能非常强大,所涉及到的内容也非常广泛,感兴趣的读者可以查看SQL Server 2005 Books Online中的XQuery详细介绍。

   尽管在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级的层次。

0
相关文章