共用方式為


使用巢狀 FOR XML 查詢

xml FOR XML 查詢中的資料類型和 TYPE 指令使 FOR XML 查詢所傳回的 XML 可以在伺服器與用戶端進行處理。

使用 xml 類型變數處理

您可以將 FOR XML 查詢結果指派給 xml 類型變數,或使用 XQuery 來查詢結果,並將該結果指派給 xml 類型變數以取得更多處理。

DECLARE @x xml  
SET @x=(SELECT ProductModelID, Name  
        FROM Production.ProductModel  
        WHERE ProductModelID=122 or ProductModelID=119  
        FOR XML RAW, TYPE)  
SELECT @x  
-- Result  
--<row ProductModelID="122" Name="All-Purpose Bike Stand" />  
--<row ProductModelID="119" Name="Bike Wash" />  

您可以使用xml的一種數據類型方法,來進一步處理變數@x中傳回的 XML。 例如,您可以使用 ProductModelID value() 方法 來擷取屬性值。

DECLARE @i int;  
SET @i = (SELECT @x.value('/row[1]/@ProductModelID[1]', 'int'));  
SELECT @i;  

在以下範例中,FOR XML 查詢結果將作為 xml 類型傳回,因為在 FOR XML 子句中指定了 TYPE 指示詞。

SELECT ProductModelID, Name  
FROM Production.ProductModel  
WHERE ProductModelID=119 or ProductModelID=122  
FOR XML RAW, TYPE,ROOT('myRoot');  
  

以下是結果:

<myRoot>  
  <row ProductModelID="122" Name="All-Purpose Bike Stand" />  
  <row ProductModelID="119" Name="Bike Wash" />  
</myRoot>  

因為結果的類型是 xml ,所以您可以直接針對這個 XML 指定其中一個 xml 數據類型方法,如下列查詢所示。 在查詢中,query() 方法 (xml 數據類型) 是用來擷取元素的第一個<row>元素子系。<myRoot>

SELECT  (SELECT ProductModelID, Name  
         FROM Production.ProductModel  
         WHERE ProductModelID=119 or ProductModelID=122  
         FOR XML RAW, TYPE,ROOT('myRoot')).query('/myRoot[1]/row[1]');  
  

以下是結果:

<row ProductModelID="122" Name="All-Purpose Bike Stand" />  

將內部 FOR XML 查詢結果傳回外部查詢做為 xml 類型實例

您可以撰寫巢狀 FOR XML 查詢,其中內部查詢的結果會當 xml 做類型傳回給外部查詢。 例如:

SELECT Col1,   
       Col2,   
       ( SELECT Col3, Col4   
        FROM  T2  
        WHERE T2.Col = T1.Col  
        ...  
        FOR XML AUTO, TYPE )  
FROM T1  
WHERE ...  
FOR XML AUTO, TYPE;  

請注意下列項目是從上一個查詢而來:

  • 以內部 FOR XML 查詢產生的 XML 會加入至外部 FOR XML產生的 XML 中。

  • 內部查詢指定了 TYPE 指示詞。 因此,內部查詢所傳回的 XML 資料的類型為 xml 。 如果未指定 TYPE 指示詞,則會傳回內部 FOR XML 查詢的結果為 nvarchar(max),並且 XML 數據會轉換成實體。

控制產生的 XML 數據圖形

巢狀 FOR XML 查詢可讓您有更多的控制權,以定義所產生之 XML 資料的外觀。 您可以使用 FOR XML 查詢來建構部分為屬性中心、部分為元素中心的 XML。

如需使用巢狀 FOR XML 查詢指定屬性中心及元素中心之 XML 的詳細資訊,請參閱 與巢狀 FOR XML 查詢比較的 FOR XML 查詢使用巢狀 FOR XML 查詢組成 XML

您可以透過指定巢狀的 AUTO 模式 FOR XML 查詢來生成包括同級元素的 XML 階層。 如需詳細資訊,請參閱 以巢狀 AUTO 模式查詢生成同級項目

不論您使用的模式為何,巢狀 FOR XML 查詢都能提供更多的控制權以描述所產生 XML 的形狀。 它們可用來取代 EXPLICIT 模式查詢。

範例

下列主題將提供巢狀 FOR XML 查詢的範例。

FOR XML 查詢與巢狀 FOR XML 查詢的比較
將單一層 FOR XML 查詢與巢狀 FOR XML 查詢做比較。 此範例包含一個示範,說明如何同時將屬性中心和元素中心 XML 指定為查詢的結果。

使用巢狀 AUTO 模式查詢生成兄弟節點
示範如何使用巢狀 AUTO 模式查詢產生同級節點

在 ASP.NET 中使用巢狀 FOR XML 查詢
示範 ASPX 應用程式如何使用 FOR XML,從 SQL Server 傳回 XML。

使用巢狀 FOR XML 查詢組成 XML
示範如何使用巢狀 FOR XML 查詢,以控制 SQL Server 所建立 XML 文件的結構。