FOR XML (SQL Server)FOR XML (SQL Server)

適用対象:Applies to: はいSQL ServerSQL Server (サポートされているすべてのバージョン) yesSQL ServerSQL Server (all supported versions) はいAzure SQL データベースAzure SQL DatabaseYesAzure SQL データベースAzure SQL Database適用対象:Applies to: はいSQL ServerSQL Server (サポートされているすべてのバージョン) yesSQL ServerSQL Server (all supported versions) はいAzure SQL データベースAzure SQL DatabaseYesAzure SQL データベースAzure SQL Database

SELECT クエリは、結果を行セットとして返します。A SELECT query returns results as a rowset. 必要に応じて、SQL クエリに FOR XML 句を指定することで、SQL クエリの結果を XML 形式で取得することができます。You can optionally retrieve formal results of a SQL query as XML by specifying the FOR XML clause in the query. FOR XML 句は、最上位レベルのクエリとサブクエリのいずれでも使用できます。The FOR XML clause can be used in top-level queries and in subqueries. 最上位レベルの FOR XML 句は、SELECT ステートメント内でのみ使用できます。The top-level FOR XML clause can be used only in the SELECT statement. サブクエリでは、FOR XML を INSERT、UPDATE、DELETE ステートメント内で使用できます。In subqueries, FOR XML can be used in the INSERT, UPDATE, and DELETE statements. FOR XML は代入ステートメントでも使用できます。FOR XML can also be used in assignment statements.

FOR XML 句には、次のモードのうち 1 つを指定します。In a FOR XML clause, you specify one of these modes:

  • RAWRAW
  • AUTOAUTO
  • EXPLICITEXPLICIT
  • PATHPATH

RAW モードでは、SELECT ステートメントによって返された行セットの行 1 つにつき 1 つの <row> 要素を生成します。The RAW mode generates a single <row> element per row in the rowset that is returned by the SELECT statement. 入れ子にした FOR XML クエリを作成することで、XML 階層を生成できます。You can generate XML hierarchy by writing nested FOR XML queries.

AUTO モードは、SELECT ステートメントがどのように指定されているかに基づき、帰納的な方法で入れ子になった結果の XML を生成します。The AUTO mode generates nesting in the resulting XML by using heuristics based on the way the SELECT statement is specified. 生成される XML の構造については最小限の制御しか行えません。You have minimal control over the shape of the XML generated. AUTO モードで帰納的に生成された XML 構造に対して、入れ子になった FOR XML クエリを作成し、XML 階層を生成することができます。The nested FOR XML queries can be written to generate XML hierarchy beyond the XML shape that is generated by AUTO mode heuristics.

EXPLICIT モードでは、XML の構造をより厳密に制御することができます。The EXPLICIT mode allows more control over the shape of the XML. 属性や要素を自由に組み合わせて、XML の構造を決めることができます。You can mix attributes and elements at will in deciding the shape of the XML. このモードでは、クエリを実行した結果として生成される行セットに特定の形式を指定する必要があります。It requires a specific format for the resulting rowset that is generated because of query execution. その後、この行セットの形式が、XML の構造にマップされます。This rowset format is then mapped into XML shape. EXPLICIT モードの利点は、属性と要素を自由に組み合わせることができる点です。また、ラッパーや入れ子にした複雑なプロパティを作成したり、スペースで区切られた値を作成したり (OrderID 属性に注文 ID 値の一覧を渡すなど)、混合コンテンツを作成することもできます。The power of EXPLICIT mode is to mix attributes and elements at will, create wrappers and nested complex properties, create space-separated values (for example, OrderID attribute may have a list of order ID values), and mixed contents.

ただし、EXPLICIT モードのクエリを記述する作業は複雑になることがあります。However, writing EXPLICIT mode queries can be cumbersome. EXPLICIT モードを使用して階層を生成する代わりに、RAW、AUTO、または PATH モードの入れ子にした FOR XML クエリと TYPE ディレクティブを作成するなど、FOR XML の新しい機能を使用できます。You can use some of the new FOR XML capabilities, such as writing nested FOR XML RAW/AUTO/PATH mode queries and the TYPE directive, instead of using EXPLICIT mode to generate the hierarchies. このような入れ子にした FOR XML クエリでも、EXPLICIT モードで生成できる XML を作成することができます。The nested FOR XML queries can produce any XML that you can generate by using the EXPLICIT mode. 詳細については、 入れ子になった FOR XML クエリの使用 および FOR XML クエリの TYPE ディレクティブを参照してください。For more information, see Use Nested FOR XML Queries and TYPE Directive in FOR XML Queries.

PATH モードと FOR XML クエリの入れ子機能を組み合わせると、EXPLICIT モードと同等の柔軟性が得られます。The PATH mode together with the nested FOR XML query capability provides the flexibility of the EXPLICIT mode in a simpler manner.

これらのモードは、モードが設定されたクエリの実行に限って有効です。These modes are in effect only for the execution of the query for which they are set. 後続のクエリの結果に影響は与えません。They do not affect the results of any subsequent queries.

FOR BROWSE 句で使用されるどのような選択に対しても FOR XML は無効です。FOR XML is not valid for any selection that is used with a FOR BROWSE clause.

Example

次の SELECT ステートメントは、 Sales.Customer データベースの Sales.SalesOrderHeader テーブルおよび AdventureWorks2012 テーブルの情報を取得します。The following SELECT statement retrieves information from the Sales.Customer and Sales.SalesOrderHeader tables in the AdventureWorks2012 database. このクエリでは、 AUTO 句に FOR XML モードを指定しています。This query specifies the AUTO mode in the FOR XML clause:

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 句とサーバー名The FOR XML Clause and Server Names

FOR XML 句を伴う SELECT ステートメントが、クエリの中で 4 つの部分から構成される名前を指定している場合、クエリがローカル コンピューター上で実行されると、結果の XML ドキュメントにサーバー名は返されません。When a SELECT statement with a FOR XML clause specifies a four-part name in the query, the server name is not returned in the resulting XML document when the query is executed on the local computer. しかし、クエリがネットワーク サーバー上で実行されると、4 つの部分から構成される名前でサーバー名が返されます。However, the server name is returned as the four-part name when the query is executed on a network server.

たとえば、次のクエリについて考えてみます。For example, consider this query:

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

 

ローカル サーバーServerName がローカル サーバーの場合、クエリでは次のテキストが返されます。Local server:   When ServerName is a local server, the query returns the following text:

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

 

ネットワーク サーバーServerName がネットワーク サーバーの場合、クエリでは次のテキストが返されます。Network server:   When ServerName is a network server, the query returns the following text:

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

 

あいまいさの排除:  次の別名を指定することによって、このようなあいまいさの可能性を排除できます。Avoid ambiguity:   This potential ambiguity can be avoided by specifying this alias:

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

明確なクエリで次のテキストが返されるようになります。Now the disambiguated query returns the following text:

<x LastName="Achong"/>

参照See Also

FOR XML 句の基本構文Basic Syntax of the FOR XML Clause
FOR XML での RAW モードの使用Use RAW Mode with FOR XML
FOR XML での AUTO モードの使用Use AUTO Mode with FOR XML
FOR XML での EXPLICIT モードの使用Use EXPLICIT Mode with FOR XML
FOR XML での PATH モードの使用Use PATH Mode with FOR XML
OPENXML (SQL Server)OPENXML (SQL Server)
WITH XMLNAMESPACES を使用したクエリへの名前空間の追加Add Namespaces to Queries with WITH XMLNAMESPACES