本主题提供有关客户端 XML 格式的信息。 客户端格式是指中间层上的 XML 格式。
注释
本主题提供有关在客户端上使用 FOR XML 子句的其他信息,并假定你已熟悉 FOR XML 子句。 有关 FOR XML 的详细信息,请参阅 使用 FOR XML 构造 XML。
重要 若要将客户端 FOR XML 功能与新的 xml 数据类型一起使用,客户端应始终使用 SQL Server Native Client (SQLNCLI11) 数据提供程序而不是 SQLOLEDB 提供程序。 SQLNCLI11是 SQL Server 提供程序的最新版本,完全了解 SQL Server 2005 中引入的数据类型。 客户端 FOR XML 与 SQLOLEDB 提供程序的行为将数据类型视为 xml 字符串。
在客户端设置 XML 文档的格式
客户端应用程序执行以下查询时:
SELECT FirstName, LastName
FROM Person.Contact
FOR XML RAW
...只有此部分的查询发送到服务器:
SELECT FirstName, LastName
FROM Person.Contact
服务器执行查询并将行集(其中包含 FirstName 和 LastNamecolumns)返回到客户端。 然后,中间层将 FOR XML 转换应用于行集,并将 XML 格式返回到客户端。
同样,执行 XPath 查询时,服务器会将行集返回到客户端,FOR XML EXPLICIT 转换将应用于客户端上的行集,从而生成所需的 XML 格式。
下表显示了可以使用客户端 FOR XML 指定的模式。
| 客户端 FOR XML 模式 | 注释 |
|---|---|
| 生 | 在客户端或服务器端 FOR XML 中指定时生成相同的结果。 |
| 嵌 套 | 类似于服务器端的 FOR XML AUTO 模式。 |
| 明确 | 类似于服务器端 FOR XML EXPLICIT 模式。 |
注释
如果指定 AUTO 模式并请求客户端 XML 格式,则会将整个查询发送到服务器;也就是说,XML 格式发生在服务器上。 这样做是为了方便起见,但请注意,NESTED 模式将基表名称作为生成的 XML 文档中的元素名称返回。 你编写的某些应用程序可能需要基表名称。 例如,可以执行存储过程并在数据集(Microsoft .NET Framework 中)加载生成的数据,然后生成 DiffGram 以更新表中的数据。 在这种情况下,需要基表信息,并且必须使用 NESTED 模式。
客户端 XML 格式的优点
以下是在客户端上设置 XML 格式的一些好处。
如果在返回单个行集的服务器上具有存储过程,则可以请求客户端 FOR XML 转换以生成 XML。
例如,请考虑以下存储过程。 此过程返回 AdventureWorks 数据库中 Person.Contact 表中员工的名字和姓氏:
IF EXISTS (SELECT name FROM sysobjects
WHERE name = 'GetContacts' AND type = 'P')
DROP PROCEDURE GetContacts
GO
CREATE PROCEDURE GetContacts
AS
SELECT FirstName, LastName
FROM Person.Contact
以下示例 XML 模板执行存储过程。 FOR XML 子句在存储过程名称后面指定。
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<sql:query client-side-xml="1">
EXEC GetContacts FOR XML NESTED
</sql:query>
</ROOT>
由于 客户端 xml 属性在模板中设置为 1(true),因此存储过程在服务器上执行,服务器返回的双列行集将转换为中间层上的 XML,并返回到客户端。 (此处仅显示部分结果。
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<Person.Contact FirstName="Gustavo" LastName="Achong" />
<Person.Contact FirstName="Catherine" LastName="Abel" />
</ROOT>
注释
使用 SQLXMLOLEDB 提供程序或 SQLXML 托管类时,可以使用 ClientSideXml 该属性请求客户端 XML 格式。
工作负荷更加均衡。
由于客户端执行 XML 格式设置,因此工作负载在服务器和客户端之间平衡,从而释放服务器执行其他作。
支持客户端 XML 格式设置
为了支持客户端 XML 格式设置功能,SQLXML 提供:
SQLXMLOLEDB 提供程序
SQLXML 托管类
增强的 XML 模板支持
SqlXmlCommand.ClientSideXml 属性
可以通过将 SQLXML 托管类的此属性设置为 true 来指定客户端格式。
增强的 XML 模板支持
从 SQL Server 2005 开始,SQL Server 中的 XML 模板通过添加 客户端 xml 属性进行了增强。 如果此属性设置为 true,则会在客户端上设置 XML 格式。 请注意,此模板属性的功能与特定于 SQLXMLOLEDB 提供程序的 ClientSideXML 属性相同。
注释
如果在使用 SQLXMLOLEDB 提供程序的 ADO 应用程序中执行 XML 模板,并在模板和提供程序 ClientSideXML 属性中同时指定 客户端 xml 属性,则模板中指定的值优先。
另请参阅
客户端和服务器端 XML 格式的体系结构(SQLXML 4.0)
FOR XML (SQL Server)
FOR XML 安全注意事项 (SQLXML 4.0)
SQLXML 4.0 中的 xml 数据类型支持
SQLXML 托管类
客户端 XML 格式与服务器端 XML 格式设置(SQLXML 4.0)
SqlXmlCommand 对象 (SQLXML 托管类)
XML 数据 (SQL Server)