次の方法で共有


FOR XML (SQL Server)

SELECT クエリは、結果を行セットとして返します。 必要に応じて、クエリで FOR XML 句を指定することで、SQL クエリの正式な結果を XML として取得できます。 FOR XML 句は、最上位レベルのクエリとサブ クエリで使用できます。 最上位の FOR XML 句は、SELECT ステートメントでのみ使用できます。 サブクエリでは、INSERT、UPDATE、DELETE ステートメントで FOR XML を使用できます。 代入ステートメントでも使用できます。

FOR XML 句では、次のいずれかのモードを指定します。

  • 未加工

  • 自動

  • 明確な

  • パス

RAW モードでは、SELECT ステートメントによって返される行セット内の行ごとに 1 つの <row> 要素が生成されます。 入れ子になった FOR XML クエリを記述することで、XML 階層を生成できます。

AUTO モードでは、SELECT ステートメントの指定方法に基づくヒューリスティックを使用して、結果の XML に入れ子を生成します。 生成される XML の形状を最小限に制御できます。 入れ子になった FOR XML クエリを記述して、AUTO モードヒューリスティックによって生成される XML 図形を超えて XML 階層を生成できます。

EXPLICIT モードを使用すると、XML の形状をより詳細に制御できます。 XML の形状を決定する際に、属性と要素を組み合わせることができます。 クエリの実行のために生成される行セットには、特定の形式が必要です。 この行セット形式は、XML 図形にマップされます。 EXPLICIT モードの機能は、属性と要素の組み合わせ、ラッパーと入れ子になった複合プロパティの作成、スペース区切りの値の作成 (OrderID 属性に注文 ID 値の一覧が含まれる場合など)、およびコンテンツの混在です。

ただし、EXPLICIT モードのクエリの記述は面倒な場合があります。 入れ子になった FOR XML RAW/AUTO/PATH モードクエリや TYPE ディレクティブの記述など、新しい FOR XML 機能の一部を使用できます。階層の生成には EXPLICIT モードを使用する代わりに使用できます。 入れ子になった FOR XML クエリでは、EXPLICIT モードを使用して生成できる任意の XML を生成できます。 詳細については、「入れ子 FOR XML クエリを使用するFOR XML クエリでの TYPE ディレクティブ」を参照してください。

PATH モードと入れ子になった FOR XML クエリ機能により、より簡単な方法で EXPLICIT モードの柔軟性を提供します。

これらのモードは、設定されているクエリの実行に対してのみ有効です。 後続のクエリの結果には影響しません。

FOR XML は、FOR BROWSE 句で使用される選択には無効です。

次の SELECT ステートメントは、AdventureWorks2012 データベースのSales.CustomerテーブルとSales.SalesOrderHeader テーブルから情報を取得します。 このクエリでは、FOR XML句でAUTO モードを指定します。

USE AdventureWorks2012  
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 ステートメントでクエリで 4 部構成の名前が指定されている場合、ローカル コンピューターでクエリが実行されるときに、結果の XML ドキュメントにサーバー名が返されません。 ただし、ネットワーク サーバーでクエリを実行すると、サーバー名が 4 部構成の名前として返されます。

たとえば、次のクエリを考えてみましょう。

SELECT TOP 1 LastName  
FROM ServerName.AdventureWorks2012.Person.Person  
FOR XML AUTO  

ServerNameがローカル サーバーの場合、クエリは次を返します。

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

ServerNameがネットワーク サーバーの場合、クエリは次を返します。

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

この潜在的なあいまいさを回避するには、次のエイリアスを指定します。

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

このクエリは次を返します。

<x LastName="Achong"/>  

こちらもご覧ください

FOR XML 句の基本的な構文
FOR XML で RAW モードを使用する
FOR XML で AUTO モードを使用する
FOR XML で EXPLICIT モードを使用する
FOR XML で PATH モードを使用する
OPENXML (SQL Server)
WITH XMLNAMESPACES を使用したクエリへの名前空間の追加