检索和编写 XML 数据
可以执行 SQL 查询返回 XML 格式而不是标准行集的结果。可以直接或从存储过程中执行这些查询。若要直接检索结果,请使用 SELECT 语句的 FOR XML 子句,并在 FOR XML 子句中指定 XML 模式:RAW、AUTO 或 EXPLICIT。
例如,下面的 SELECT 语句从 Northwind 数据库的 Customers 和 Orders 表中检索信息。下面的查询在 FOR XML 子句中指定 AUTO 模式:
SELECT Customers.CustomerID, ContactName, CompanyName,
Orders.CustomerID, OrderDate
FROM Customers, Orders
WHERE Customers.CustomerID = Orders.CustomerID
AND (Customers.CustomerID = N'ALFKI'
OR Customers.CustomerID = N'XYZAA')
ORDER BY Customers.CustomerID
FOR XML AUTO
尽管可用 FOR XML 子句检索 XML 文档形式的数据,但也可用 Transact-SQL OPENXML 函数插入以 XML 文档形式表示的数据。OPENXML 是类似于表或视图的行集提供程序,用于提供内存中 XML 文档上的行集。OPENXML 通过提供 XML 文档内部表示法的行集视图,允许访问 XML 数据,就好象它是关系行集一样。行集中的记录可以存储在数据库表中。OPENXML 可以在 SELECT 和 SELECT INTO 语句中使用,在这些语句中可以指定源表或视图。
下例说明 OPENXML 在 INSERT 和 SELECT 语句中的用法。示例 XML 文档由 <Customers> 和 <Orders> 元素组成。首先,sp_xml_preparedocument 存储过程分析 XML 文档。分析后的文档是 XML 文档各节点(元素、特性、文本、注释等)的树型表示法。然后 OPENXML 引用这个经过分析的 XML 文档并提供该 XML 文档的全部或部分内容的行集视图。使用 OPENXML 的 INSERT 语句从而可将数据从这样的行集插入数据库表。可用几个 OPENXML 调用提供 XML 文档各部分的行集视图并对它们进行处理,例如,将它们插入不同的表中(该过程也称为"将 XML 拆分到表中")。在下例中,一个 XML 文档被这样拆分:使用两个 INSERT 语句将 <Customers> 元素存储在 Customers 表中并将 <Orders> 元素存储在 Orders 表中。
下例还显示带有 OPENXML 的 SELECT 语句从 XML 文档检索 CustomerID 和 OrderDate。
DECLARE @hDoc int
EXEC sp_xml_preparedocument @hDoc OUTPUT,
N'<ROOT>
<Customers CustomerID="XYZAA" ContactName="Joe"
CompanyName="Company1">
<Orders CustomerID="XYZAA"
OrderDate="2000-08-25T00:00:00"/>
<Orders CustomerID="XYZAA"
OrderDate="2000-10-03T00:00:00"/>
</Customers>
<Customers CustomerID="XYZBB" ContactName="Steve"
CompanyName="Company2">No Orders yet!
</Customers>
</ROOT>'
-- Use OPENXML to provide rowset consisting of customer data.
INSERT Customers
SELECT *
FROM OPENXML(@hDoc, N'/ROOT/Customers')
WITH Customers
-- Use OPENXML to provide rowset consisting of order data.
INSERT Orders
SELECT *
FROM OPENXML(@hDoc, N'//Orders')
WITH Orders
-- Using OPENXML in a SELECT statement.
SELECT * FROM OPENXML(@hDoc, N'/ROOT/Customers/Orders') with (CustomerID nchar(5) '../@CustomerID', OrderDate datetime)
-- Remove the internal representation of the XML document.
EXEC sp_xml_removedocument @hDoc
XML 和 Internet 支持概述
Microsoft® SQL Server™ 2000 引入了支持 XML 功能的新特性。这些功能组合在一起使 SQL Server 2000 成为可支持 XML 的数据库服务器。这些新特性包括:
能够使用 HTTP 访问 SQL Server。
支持 XDR(XML数据简化)架构并且能够指定对这些架构的 XPath 查询。
能够检索并写入 XML 数据:
使用 SELECT 语句和 FOR XML 子句检索 XML 数据。
使用 OPENXML 行集提供程序写入 XML 数据。
使用 XPath 查询语言检索 XML 数据。
增强了 Microsoft SQL Server 2000 OLE DB 提供程序 (SQLOLEDB),使得可以将 XML 文档设置为命令文本并以流的形式返回结果集。
有关 SQL Server 对 XML 支持的最新更新,请参见 Microsoft Web 站点的 MSDN® 上的 XML Developer Center(XML 开发人员中心)。
说明 Msxml2.dll 是随 SQL Server 2000 一起安装的,但不安装其它工具。例如不安装 Xmlinst.exe,该工具用于配置 Microsoft Internet Explorer 以使用 MSXML2。完整的 MSXML2 包必须安装,以获得该功能。MSXML2 可以从 Microsoft Web 站点的 MSDN 上的 XML Developer Center 下载。
XML 入门
若要使用 Microsoft SQL Server 2000 提供的 XML 功能,必须使用过 XML、URL 语法和 HTTP 方法。还应熟悉下列术语:
XML 文档
是包含 XML 元素和特性的文档。
文档类型定义 (DTD)
定义可用于 XML 文档的元素和特性。
样式表
描述格式化或显示数据的方式。可扩展样式表语言 (XSL) 是 XML 文档中常用的语言。
窗体
是用于收集和提交数据以进行处理的结构化文档。
模板
在 SQL Server 2000 中引入的概念,模板是包含一个或多个 SQL 语句的有效 XML 文档。模板文件用于指定查询(SQL 和 Xpath 查询)。不是在 URL 中指定查询,而是在 URL 中指定包含查询的模板文件。
虚拟根
由 Microsoft Internet 信息服务 (IIS) 引入的概念,通常将虚拟根作为 IIS 的一部分进行管理。