用戶端 XML 格式 (SQLXML 4.0)

適用於:SQL ServerAzure SQL DatabaseAzure SQL 受控執行個體

本主題提供有關用戶端 XML 格式的資訊。 用戶端格式指的是 XML 在中間層的格式。

注意

本主題提供在用戶端上使用 FOR XML 子句的其他資訊,並假設您已經熟悉 FOR XML 子句。 如需 FOR XML 的詳細資訊,請參閱 使用 FOR XML 建構 XML

SQLNCLI11 是第一個版本的SQL Server提供者,可完整瞭解 2005 SQL Server 2005 (9.x) 中引進的資料類型。 用戶端 FOR XML 與 SQLOLEDB 提供者的行為會將 xml 資料類型視為字串。

重要

SQL Server Native Client (通常縮寫為 SNAC) 已從 SQL Server 2022 (16.x) 和 SQL Server Management Studio 19 (SSMS) 中移除。 不建議使用 SQL Server Native Client (SQLNCLI 或 SQLNCLI11) 和舊版 Microsoft OLE DB Provider for SQL Server (SQLOLEDB) 開發新應用程式。 日後請改用新的 Microsoft OLE DB Driver (MSOLEDBSQL) for SQL Server 或最新的 Microsoft ODBC Driver for SQL Server。 對於隨附為 SQL Server Database Engine (2012 到 2019 版) 的 SQLNCLI,請參閱此支援生命週期例外狀況

格式化用戶端上的 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 模式 註解
RAW 在用戶端或伺服器端的 FOR XML 中指定時,會產生相同的結果。
NESTED 這類似於伺服器端上的 FOR XML AUTO 模式。
EXPLICIT 這類似於伺服器端的 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 Managed 類別時,您可以使用 ClientSideXml 屬性來要求用戶端 XML 格式設定。

工作負載較為對稱。

由於用戶端會執行 XML 格式化,因此在伺服器和用戶端之間的工作負載較為對稱,讓伺服器可以做其他的事情。

支援用戶端 XML 格式

為支援用戶端 XML 格式功能,SQLXML 提供:

  • SQLXMLOLEDB 提供者

  • SQLXML Managed 類別

  • 增強的 XML 範本支援

  • SqlXmlCommand.ClientSideXml 屬性

    您可以將 SQLXML Managed 類別的這個屬性設定為 true,藉以指定用戶端功能。

增強的 XML 範本支援

從 SQL Server 2005 (9.x) 開始,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)
xml 資料類型在 SQLXML 4.0 中的支援
SQLXML Managed 類別
用戶端和伺服器端的 XML 格式化 (SQLXML 4.0)
SqlXmlCommand 物件 (SQLXML Managed 類別)
XML 資料 (SQL Server)