共用方式為


用戶端 XML 格式 (SQLXML 4.0)

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

[!附註]

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

重要事項:若要搭配新的 xml 資料類型使用用戶端的 FOR XML 功能,用戶端應該永遠使用 SQL Server Native Client (SQLNCLI10) 資料提供者,而非 SQLOLEDB 提供者。SQLNCLI10 是最新版的 SQL Server 提供者,而且完全了解 SQL Server 2005 推出的資料類型。包含 SQLOLEDB 提供者之用戶端 FOR XML 的行為會將 xml 資料類型視為字串。

格式化用戶端上的 XML 文件

當用戶端應用程式執行下列查詢時:

SELECT FirstName, LastName
FROM   Person.Person
FOR XML RAW;

只有查詢的這個部分會傳送到伺服器:

SELECT FirstName, LastName
FROM   Person.Person

伺服器會執行查詢,並將資料列集 (其中包含 FirstName 和 LastName資料行) 傳回給用戶端。中間層接著會將 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。

例如,請考慮下列預存程序。此預存程序會先從 AdventureWorks2008R2 資料庫的 Person.Person 資料表中,傳回員工的名字和姓氏:

IF EXISTS (SELECT name FROM sys.objects
   WHERE name = 'GetContacts' AND type = 'P')
   DROP PROCEDURE GetContacts;
GO
CREATE PROCEDURE GetContacts
AS
    SELECT   FirstName, LastName
    FROM     Person.Person;

下列範例 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>

由於 client-side-xml 屬性在範本中設定為 1 (true),會在伺服器上執行預存程序,而且伺服器所傳回的兩資料行資料列集會在中間層轉換成 XML,然後傳回到用戶端 (此處僅顯示部分結果)。

 <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
  <Person.Person FirstName="Gustavo" LastName="Achong" /> 
  <Person.Person 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 開始,SQL Server 中的 XML 範本已經透過增加 client-side-xml 屬性來增強。如果此屬性設定為 true,XML 會在用戶端上格式化。請注意,此範本屬性 (Attribute) 在功能上與 SQLXMLOLEDB 提供者專屬的 ClientSideXML 屬性 (Property) 相同。

[!附註]

如果您在使用 SQLXMLOLEDB 提供者的 ADO 應用程式中執行 XML 範本,而且您同時指定範本中的 client-side-xml 屬性 (Attribute) 與提供者 ClientSideXML 屬性 (Property),會優先使用在範本中指定的值。