分享方式:


FOR XML (SQL Server)

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

SELECT 查詢會將結果以資料列集的形式傳回。 在查詢中指定 FOR XML 子句,您就可選擇以 XML 格式擷取 SQL 查詢的正式結果。 FOR XML 子句可以在最上層的查詢與子查詢中使用。 最上層的 FOR XML 子句只能用在 SELECT 陳述式中。 在子查詢中,FOR XML 可以在 INSERTUPDATEDELETE 語句中使用。 FOR XML 也可以用在指派陳述式中。

FOR XML 子句中,您可以指定下列其中一個模式:

  • RAW
  • AUTO
  • EXPLICIT
  • PATH

RAW 模式會對資料列集中 SELECT 陳述式傳回的每一個資料列,產生一個 <row> 項目。 您可以撰寫巢狀 FOR XML 查詢來產生 XML 階層。

AUTO 模式會使用啟發學習法 (根據 SELECT 陳述式的指定方式),在所產生的 XML 中產生巢狀結構。 您對產生的 XML 之外觀只有最少的控制權。 您可以撰寫巢狀的 FOR XML 查詢,以產生 AUTO 模式啟發學習法所產生之 XML 外觀以外的 XML 階層。

EXPLICIT 模式可讓您對 XML 外觀有更多的控制權。 您在決定 XML 的外觀時,可依照意願混合屬性和元素。 因為查詢執行的關係,產生的結果資料列集需要有特定格式。 這個資料列集格式之後會對應到 XML 外觀。 EXPLICIT 模式的功能是可依照意願混合屬性和元素、建立包裝函數和巢狀的複雜屬性,以及建立以空格分隔的值 (例如,OrderID 屬性可能有順序識別碼值的清單) 和混合的內容。

不過,撰寫 EXPLICIT 模式的查詢比較繁雜。 您可以使用部份新的 FOR XML 功能,例如撰寫巢狀的 FOR XML RAWAUTOPATH 模式查詢和 TYPE 指示詞,而不要使用 EXPLICIT 模式來產生階層。 巢狀的 FOR XML 查詢可以產生您使用 EXPLICIT 模式可產生的任何 XML。 如需詳細資訊,請參閱 使用巢狀 FOR XML 查詢在 FOR XML 查詢中的 TYPE 指示詞

若搭配使用 PATH 模式和巢狀的 FOR XML 查詢功能,則能夠以較簡易的方式提供 EXPLICIT 模式的彈性。

只有在執行設定為這些模式的查詢時,這些模式才有效。 它們並不會影響任何後續查詢的結果。

FOR XML 不適用於搭配 FOR BROWSE 子句使用的任何選取專案。

範例

下列 SELECT 陳述式可從 Sales.Customer 資料庫的 Sales.SalesOrderHeaderAdventureWorks2022 資料表擷取資訊。 此查詢在 AUTO 子句中指定了 FOR XML 模式:

USE AdventureWorks2022;
GO

SELECT Cust.CustomerID,
    OrderHeader.CustomerID,
    OrderHeader.SalesOrderID,
    OrderHeader.STATUS
FROM Sales.Customer Cust
INNER JOIN Sales.SalesOrderHeader OrderHeader
    ON Cust.CustomerID = OrderHeader.CustomerID
FOR XML AUTO;

FOR XML 子句和伺服器名稱

當包含 FOR XML 子句的 SELECT 陳述式在查詢中指定四部分的名稱時,若在本機電腦上執行查詢,則伺服器名稱並不會在產生的 XML 文件中傳回。 但如果是在網路伺服器上執行查詢,則伺服器名稱會以四個部分的名稱形式傳回。

例如,請考量以下的查詢:

SELECT TOP 1 LastName
FROM ServerName.AdventureWorks2022.Person.Person
FOR XML AUTO;

本機伺服器:若 ServerName 是本機伺服器,查詢會傳回下列文字:

<AdventureWorks2022.Person.Person LastName="Achong" />

網路伺服器:若 ServerName 是網路伺服器,查詢將會傳回下列文字:

<ServerName.AdventureWorks2022.Person.Person LastName="Achong" />

避免模稜兩可:您可以指定下列別名來避免這種模稜兩可的情況:

SELECT TOP 1 LastName
FROM ServerName.AdventureWorks2022.Person.Person x
FOR XML AUTO;

現在,消除模稜兩可的查詢會傳回下列文字:

<x LastName="Achong"/>