共用方式為


用戶端 XML 格式設定 (SQLXML 4.0)

適用於: SQL Server Azure SQL 資料庫 Azure SQL 受控執行個體

本主題提供用戶端 XML 格式設定的相關信息。 用戶端格式設定是指中介層上的 XML 格式設定。

注意

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

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

重要

SQL Server Native Client (SNAC) 未隨附:

  • SQL Server 2022 (16.x) 及更新版本
  • SQL Server Management Studio 19 和更新版本

不建議使用 SQL Server Native Client (SQLNCLI 或 SQLNCLI11) 和舊版 Microsoft OLE DB Provider for SQL Server (SQLOLEDB) 進行新的應用程式開發。

針對新專案,請使用下列其中一個驅動程式:

針對 SQL Server 資料庫引擎 (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 中指定時產生相同的結果。
嵌套 類似於伺服器端的 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 範本已透過新增 client-side-xml 屬性來增強。 如果此屬性設定為 true,則會在用戶端上格式化 XML。 請注意,此範本屬性的功能與 SQLXMLOLEDB 提供者特定的 ClientSideXML 屬性相同。

注意

如果您在使用 SQLXMLOLEDB 提供者的 ADO 應用程式中執行 XML 範本,並在範本和提供者 ClientSideXML 屬性中指定 client-side-xml 屬性,則範本中指定的值優先。

另請參閱

用戶端與伺服器端 XML 格式的架構 (SQLXML 4.0)
FOR XML (SQL Server)
FOR XML 安全性考慮 (SQLXML 4.0)
SQLXML 4.0 中的 xml 資料類型支援
SQLXML Managed 類別
用戶端與伺服器端 XML 格式設定 (SQLXML 4.0)
SqlXmlCommand 物件 (SQLXML Managed 類別)
XML 資料 (SQL Server)