SELECT の FOR 句 (TRANSACT-SQL)SELECT - FOR Clause (Transact-SQL)

適用対象:○SQL Server (2008 以降)○Azure SQL Database×Azure SQL Data Warehouse ×Parallel Data Warehouse THIS TOPIC APPLIES TO:yesSQL Server (starting with 2008)yesAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

FOR 句を使用すると、クエリ結果の次のオプションのいずれかを指定できます。Use the FOR clause to specify one of the following options for query results.

  • 指定してブラウズ モード カーソルでクエリ結果の表示中に更新を許可するFOR BROWSEです。Allow updates while viewing query results in a browse mode cursor by specifying FOR BROWSE.

  • クエリ結果を指定することによって XML として書式設定FOR XMLです。Format query results as XML by specifying FOR XML.

  • 指定して、クエリの結果を JSON として書式FOR JSONです。Format query results as JSON by specifying FOR JSON.

    トピック リンク アイコン Transact-SQL 構文表記規則Topic link icon Transact-SQL Syntax Conventions

構文Syntax


[ FOR { BROWSE | <XML> | <JSON>} ]  

<XML> ::=  
XML   
{   
    { RAW [ ( 'ElementName' ) ] | AUTO }   
    [   
        <CommonDirectivesForXML>   
        [ , { XMLDATA | XMLSCHEMA [ ( 'TargetNameSpaceURI' ) ] } ]   
        [ , ELEMENTS [ XSINIL | ABSENT ]   
    ]  
  | EXPLICIT   
    [   
        <CommonDirectivesForXML>   
        [ , XMLDATA ]   
    ]  
  | PATH [ ( 'ElementName' ) ]   
    [  
        <CommonDirectivesForXML>   
        [ , ELEMENTS [ XSINIL | ABSENT ] ]  
    ]  
}   

<CommonDirectivesForXML> ::=   
[ , BINARY BASE64 ]  
[ , TYPE ]  
[ , ROOT [ ( 'RootName' ) ] ]  

<JSON> ::=  
JSON   
{   
    { AUTO | PATH }   
    [   
        [ , ROOT [ ( 'RootName' ) ] ]  
        [ , INCLUDE_NULL_VALUES ]  
        [ , WITHOUT_ARRAY_WRAPPER ]  
    ]  

}  

FOR BROWSEFOR BROWSE

BROWSEBROWSE
DB-Library ブラウズ モード カーソルでデータを表示しているときに、更新が許可されます。Specifies that updates be allowed while viewing the data in a DB-Library browse mode cursor. テーブルは、テーブルが含まれている場合、アプリケーションで参照できる、タイムスタンプ列、テーブル、一意のインデックスがあり、FOR BROWSE オプションがのインスタンスに送信される SELECT ステートメントの最後にある SQL ServerSQL Serverです。A table can be browsed in an application if the table includes a timestamp column, the table has a unique index, and the FOR BROWSE option is at the end of the SELECT statements sent to an instance of SQL ServerSQL Server.

注意

使用することはできません、 <lock_hint > HOLDLOCK、FOR BROWSE オプションを含む SELECT ステートメントでします。You cannot use the <lock_hint> HOLDLOCK in a SELECT statement that includes the FOR BROWSE option.

FOR BROWSE は、UNION 演算子によって結合された SELECT ステートメントでは使えません。FOR BROWSE cannot appear in SELECT statements that are joined by the UNION operator.

注意

テーブルの一意なインデックス キー列が NULL 値を許容し、かつそのテーブルが外部結合の内部にある場合、そのインデックスはブラウズ モードではサポートされません。When the unique index key columns of a table are nullable, and the table is on the inner side of an outer join, the index is not supported by browse mode.

ブラウズ モードでは、行をスキャンしてできます、 SQL ServerSQL Serverテーブルが表示され、一度に 1 行のテーブル内のデータを更新します。The browse mode lets you scan the rows in your SQL ServerSQL Server table and update the data in your table one row at a time. アクセスする、 SQL ServerSQL Serverテーブル ブラウズ モードで、アプリケーションで、次の 2 つのオプションのいずれかを使用する必要があります。To access a SQL ServerSQL Server table in your application in the browse mode, you must use one of the following two options:

  • SELECT ステートメントからデータにアクセスするために使用、 SQL ServerSQL Serverテーブルは、キーワードで終了する必要がありますFOR BROWSEです。The SELECT statement that you use to access the data from your SQL ServerSQL Server table must end with the keywords FOR BROWSE. 有効にすると、 FOR BROWSEブラウズ モードを使用するオプションで、一時テーブルが作成されます。When you turn on the FOR BROWSE option to use browse mode, temporary tables are created.

  • 次を実行する必要があります Transact-SQLTransact-SQLステートメントを使用してブラウズ モードを有効にする、 NO_BROWSETABLEオプション。You must run the following Transact-SQLTransact-SQL statement to turn on the browse mode by using the NO_BROWSETABLE option:

    SET NO_BROWSETABLE ON  
    

    有効にすると、 NO_BROWSETABLEオプションのすべての SELECT ステートメントの動作として、 FOR BROWSEオプションは、ステートメントに追加されます。When you turn on the NO_BROWSETABLE option, all the SELECT statements behave as if the FOR BROWSE option is appended to the statements. ただし、 NO_BROWSETABLEオプションはありません、一時テーブルを作成する、 FOR BROWSEオプション一般的に使用して、結果をアプリケーションに送信します。However, the NO_BROWSETABLE option does not create the temporary tables that the FOR BROWSE option generally uses to send the results to your application.

    データにアクセスしようとすると SQL ServerSQL Server内のテーブルが外部結合ステートメントを含む SELECT クエリを使用してモードを参照してブラウズ モードが sup ない外部結合ステートメントの内側にあるテーブルに一意のインデックスが定義されると、ポート、一意のインデックスです。When you try to access the data from SQL ServerSQL Server tables in browse mode by using a SELECT query that involves an outer join statement, and when a unique index is defined on the table that is present on the inner side of an outer join statement, the browse mode does not support the unique index. ブラウズ モードで一意のインデックスがサポートされるのは、すべての一意のインデックス キー列が NULL 値を使用できる場合のみです。The browse mode supports the unique index only when all the unique index key columns can accept null values. 次の条件に当てはまる場合は、ブラウズ モードで一意のインデックスがサポートされません。The browse mode does not support the unique index if the following conditions are true:

  • データにアクセスしようとする SQL ServerSQL Server内のテーブルが外部結合ステートメントを含む SELECT クエリを使用してモードを参照します。You try to access the data from SQL ServerSQL Server tables in browse mode by using a SELECT query that involves an outer join statement.

  • 外部結合ステートメントの内部に存在するテーブルに一意のインデックスが定義されている場合。A unique index is defined on the table that is present on the inner side of an outer join statement.

    ブラウズ モードでこの動作を再現するには、以下の手順を実行します。To reproduce this behavior in the browse mode, follow these steps:

  1. SQL Server Management StudioSQL Server Management Studio で、SampleDB という名前のデータベースを作成します。In SQL Server Management StudioSQL Server Management Studio, create a database, named SampleDB.

  2. SampleDB データベースに tleft テーブルと tright テーブルを作成し、両方に c1 という単一列が含まれるようにします。In the SampleDB database, create a tleft table and a tright table that both contain a single column that is named c1. tleft テーブルの c1 列に一意のインデックスを定義し、この列が NULL 値を許容するように設定します。Define a unique index on the c1 column in the tleft table, and set the column to accept null values. これを行うには、次を実行 Transact-SQLTransact-SQL適切なクエリ ウィンドウ内のステートメント。To do this, run the following Transact-SQLTransact-SQL statements in an appropriate query window:

    CREATE TABLE tleft(c1 INT NULL UNIQUE) ;  
    GO   
    CREATE TABLE tright(c1 INT NULL) ;  
    GO  
    
  3. tleft テーブルと tright テーブルに複数の値を挿入します。Insert several values in the tleft table and the tright table. tleft テーブルに NULL 値を挿入します。Make sure that you insert a null value in the tleft table. これを行うには、次を実行 Transact-SQLTransact-SQLクエリ ウィンドウ内のステートメント。To do this, run the following Transact-SQLTransact-SQL statements in the query window:

    INSERT INTO tleft VALUES(2) ;  
    INSERT INTO tleft VALUES(NULL) ;  
    INSERT INTO tright VALUES(1) ;  
    INSERT INTO tright VALUES(3) ;  
    INSERT INTO tright VALUES(NULL) ;  
    GO  
    
  4. オン、 NO_BROWSETABLEオプション。Turn on the NO_BROWSETABLE option. これを行うには、次を実行 Transact-SQLTransact-SQLクエリ ウィンドウ内のステートメント。To do this, run the following Transact-SQLTransact-SQL statements in the query window:

    SET NO_BROWSETABLE ON ;  
    GO  
    
  5. SELECT クエリで外部結合ステートメントを使用して、tleft テーブルと tright テーブルのデータにアクセスします。Access the data in the tleft table and the tright table by using an outer join statement in the SELECT query. tleft テーブルが外部結合ステートメントの内部に存在することを確認します。Make sure that the tleft table is on the inner side of the outer join statement. これを行うには、次を実行 Transact-SQLTransact-SQLクエリ ウィンドウ内のステートメント。To do this, run the following Transact-SQLTransact-SQL statements in the query window:

    SELECT tleft.c1   
    FROM tleft   
    RIGHT JOIN tright   
    ON tleft.c1 = tright.c1   
    WHERE tright.c1 <> 2 ;  
    

    [結果] ペインに、次の出力が表示されます。Notice the following output in the Results pane:

    c1c1

    ----

    NULLNULL

    NULLNULL

    ブラウズ モードで SELECT クエリを実行してテーブルにアクセスすると、右外部結合ステートメントの定義に従い、SELECT クエリの結果セットに tleft テーブルの c1 列の NULL 値が 2 つ格納されます。After you run the SELECT query to access the tables in the browse mode, the result set of the SELECT query contains two null values for the c1 column in the tleft table because of the definition of the right outer join statement. したがって、結果セットではテーブルの NULL 値、および右外部結合ステートメントによって提供された NULL 値を区別できません。Therefore, in the result set, you cannot distinguish between the null values that came from the table and the null values that the right outer join statement introduced. 結果セットの NULL 値を無視しなければならない場合、正しくない結果が返されることがあります。You might receive incorrect results if you must ignore the null values from the result set.

注意

一意のインデックスに含まれる列で NULL 値を使用できない場合は、結果セットの NULL 値がすべて右外部結合ステートメントによって提供されます。If the columns that are included in the unique index do not accept null values, all the null values in the result set were introduced by the right outer join statement.

FOR XMLFOR XML

XMLXML
クエリの結果を XML ドキュメントとして返します。Specifies that the results of a query are to be returned as an XML document. XML モードとして、RAW、AUTO、EXPLICIT のいずれか 1 つを指定する必要があります。One of the following XML modes must be specified: RAW, AUTO, EXPLICIT. XML データの詳細については、 SQL ServerSQL Serverを参照してくださいFOR XML & #40 です。SQL Server ).For more information about XML data and SQL ServerSQL Server, see FOR XML (SQL Server).

生 [ ('ElementName') ]RAW [ ('ElementName') ]
クエリの結果を受け取り、汎用識別子を持つ XML 要素に結果セット内の各行を変換<行/> 要素タグとして。Takes the query result and transforms each row in the result set into an XML element with a generic identifier <row /> as the element tag. 必要に応じて、その行要素に名前を指定することもできます。You can optionally specify a name for the row element. 結果の XML 出力が、指定したElementName行ごとに生成される行要素として。The resulting XML output uses the specified ElementName as the row element generated for each row. 詳細については、次を参照してください。 FOR XML での RAW モードの使用FOR XML での RAW モードの使用です。For more information, see Use RAW Mode with FOR XML and Use RAW Mode with FOR XML.

AUTOAUTO
クエリの結果を単純な入れ子の XML ツリーで返します。Returns query results in a simple, nested XML tree. FROM 句に含まれる各テーブルは、そのうち少なくとも 1 つの列が SELECT 句の一覧に示され、XML 要素として表されます。Each table in the FROM clause, for which at least one column is listed in the SELECT clause, is represented as an XML element. SELECT 句に一覧されている列は、該当する要素属性にマップされます。The columns listed in the SELECT clause are mapped to the appropriate element attributes. 詳細については、「 FOR XML での AUTO モードの使用」を参照してください。For more information, see Use AUTO Mode with FOR XML.

EXPLICITEXPLICIT
結果として得られる XML ツリーの形状を明示的に定義することを指定します。Specifies that the shape of the resulting XML tree is defined explicitly. このモードを使用する場合は、目的の入れ子に関する追加の情報を明示的に指定できるように、クエリを特別な方法で記述する必要があります。Using this mode, queries must be written in a particular way so that additional information about the desired nesting is specified explicitly. 詳細については、「 FOR XML での EXPLICIT モードの使用」を参照してください。For more information, see Use EXPLICIT Mode with FOR XML.

XMLDATAXMLDATA
インライン XDR スキーマを返します。ただし、結果にルート要素は追加されません。Returns inline XDR schema, but does not add the root element to the result. XMLDATA を指定すると、XDR スキーマはドキュメントに追加されます。If XMLDATA is specified, XDR schema is appended to the document.

重要

XMLDATA ディレクティブは推奨されません。The XMLDATA directive is deprecated. RAW モードと AUTO モードの場合は、XSD 世代を使用してください。Use XSD generation in the case of RAW and AUTO modes. EXPLICIT モードでは、XMLDATA ディレクティブに代わる機能はありません。There is no replacement for the XMLDATA directive in EXPLICIT mode. この機能は、Microsoft SQL Server の将来のバージョンで削除されます。This feature will be removed in a future version of Microsoft SQL Server. 新規の開発作業ではこの機能を使用しないようにし、現在この機能を使用しているアプリケーションは修正することを検討してください。Avoid using this feature in new development work, and plan to modify applications that currently use this feature.

XMLSCHEMA [ ('TargetNameSpaceURI') ]XMLSCHEMA [ ('TargetNameSpaceURI') ]
インライン XSD スキーマを返します。Returns inline XSD schema. このディレクティブを指定する場合は、必要に応じて、対象名前空間の URI を指定することもできます。指定した場合は、スキーマにある指定した名前空間が返されます。You can optionally specify a target namespace URI when you specify this directive, which returns the specified namespace in the schema. 詳細については、「 Generate an Inline XSD Schema」を参照してください。For more information, see Generate an Inline XSD Schema.

ELEMENTSELEMENTS
列を副要素として返します。Specifies that the columns are returned as subelements. 指定していない場合は、XML 属性にマップされます。Otherwise, they are mapped to XML attributes. このオプションは、RAW、AUTO、および PATH モードでのみサポートされます。This option is supported in RAW, AUTO and PATH modes only. 詳細については、「 FOR XML での RAW モードの使用」を参照してください。For more information, see Use RAW Mode with FOR XML.

XSINILXSINIL
指定を持つ要素xsi:nil属性に設定True NULL 列の値を作成します。Specifies that an element with xsi:nil attribute set to True be created for NULL column values. このオプションは、ELEMENTS ディレクティブでのみ指定できます。This option can only be specified with ELEMENTS directive. 詳細については、次を参照してください。 XSINIL パラメーターで、NULL 値の要素の生成です。For more information, see Generate Elements for NULL Values with the XSINIL Parameter.

ABSENTABSENT
列の値が NULL の場合、対応する XML 要素を XML 結果に追加しません。Indicates that for null column values, corresponding XML elements will not be added in the XML result. このオプションは、ELEMENTS でのみ指定してください。Specify this option only with ELEMENTS.

パス [ ('ElementName') ]PATH [ ('ElementName') ]
生成、<行 > 要素ラッパーを結果セット内の行ごとです。Generates a <row> element wrapper for each row in the result set. 必要に応じての要素名を指定することができます、<行 > 要素ラッパーです。You can optionally specify an element name for the <row> element wrapper. FOR XML PATH など、空の文字列を提供するかどうか ('))、ラッパー要素は生成されません。If an empty string is provided, such as FOR XML PATH ('') ), a wrapper element is not generated. EXPLICIT ディレクティブを使用するよりも、PATH を使用した方が、クエリが単純になる場合があります。Using PATH may provide a simpler alternative to queries written using the EXPLICIT directive. 詳細については、「 FOR XML での PATH モードの使用」を参照してください。For more information, see Use PATH Mode with FOR XML.

BINARY BASE64BINARY BASE64
クエリは、バイナリ データをバイナリ ベース 64 エンコード形式で返します。Specifies that the query returns the binary data in binary base64-encoded format. RAW モードおよび EXPLICIT モードでバイナリ データを取得する場合は、このオプションを指定する必要があります。When you retrieve binary data by using RAW and EXPLICIT mode, this option must be specified. AUTO モードの場合は、これは既定値です。This is the default in AUTO mode.

TYPETYPE
クエリとして結果を返すことを示すxml型です。Specifies that the query returns results as xml type. 詳細については、「 FOR XML クエリの TYPE ディレクティブ」を参照してください。For more information, see TYPE Directive in FOR XML Queries.

ルート [ ('RootName') ]ROOT [ ('RootName') ]
単一のトップレベル要素を、結果として生成される XML に追加します。Specifies that a single top-level element be added to the resulting XML. 必要に応じて、生成するルート要素名を指定することもできます。You can optionally specify the root element name to generate. 省略可能なルートの名前が指定されていない場合、既定<ルート > 要素を追加します。If the optional root name is not specified, the default <root> element is added.

詳細については、次を参照してください。 FOR XML & #40 です。SQL Server ).For more info, see FOR XML (SQL Server).

XML の例FOR XML Example

次の例では、FOR XML AUTOTYPE オプションおよび XMLSCHEMA オプションと共に指定しています。The following example specifies FOR XML AUTO with the TYPE and XMLSCHEMA options. ため、TYPEオプションが、結果セットとしてクライアントに返されます、 xml型です。Because of the TYPE option, the result set is returned to the client as an xml type. XMLSCHEMA オプションは、返される XML データにインライン XSD スキーマが含まれることを指定し、ELEMENTS オプションは、結果の XML が要素中心であることを指定します。The XMLSCHEMA option specifies that the inline XSD schema is included in the XML data returned, and the ELEMENTS option specifies that the XML result is element-centric.

USE AdventureWorks2012;  
GO  
SELECT p.BusinessEntityID, FirstName, LastName, PhoneNumber AS Phone  
FROM Person.Person AS p  
JOIN Person.PersonPhone AS pph ON p.BusinessEntityID  = pph.BusinessEntityID  
WHERE LastName LIKE 'G%'  
ORDER BY LastName, FirstName   
FOR XML AUTO, TYPE, XMLSCHEMA, ELEMENTS XSINIL;  

JSON のFOR JSON

JSONJSON
指定 FOR JSON クエリの結果を返すには、JSON テキストとして書式設定します。Specify FOR JSON to return the results of a query formatted as JSON text. また、次の JSON モードのいずれかを指定する必要がある: 自動またはパス。You also have to specify one of the following JSON modes : AUTO or PATH. 詳細については、 FOR JSON句を参照してくださいクエリ結果を FOR JSON ( を使用して、JSON として書式設定SQL Server ).For more information about the FOR JSON clause, see Format Query Results as JSON with FOR JSON (SQL Server).

AUTOAUTO
構造に基づいて、自動的に JSON 出力の形式、選択ステートメントFormat the JSON output automatically based on the structure of the SELECT statement
指定してFOR JSON AUTOです。by specifying FOR JSON AUTO. 詳細と例については、「AUTO モードで自動的に JSON 出力を書式設定する (SQL Server)」を参照してください。For more info and examples, see Format JSON Output Automatically with AUTO Mode (SQL Server).

PATHPATH
指定して、JSON 出力の形式を完全に制御を取得します。Get full control over the format of the JSON output by specifying
FOR JSON PATHです。FOR JSON PATH. PATH モードでは、ラッパー オブジェクトを作成し、複雑なプロパティを入れ子にすることができます。PATH mode lets you create wrapper objects and nest complex properties. 詳細と例については、「PATH モードで入れ子になった JSON 出力を書式設定する (SQL Server)」を参照してください。For more info and examples, see Format Nested JSON Output with PATH Mode (SQL Server).

INCLUDE_NULL_VALUESINCLUDE_NULL_VALUES
指定して、JSON 出力に null 値を含める、 INCLUDE_NULL_VALUESオプションは、 FOR JSON句。Include null values in the JSON output by specifying the INCLUDE_NULL_VALUES option with the FOR JSON clause. このオプションを指定しない場合、出力は、クエリの結果に null 値を JSON のプロパティを含まれません。If you don't specify this option, the output does not include JSON properties for null values in the query results. 詳細と例については、次を参照してくださいINCLUDE_NULL_VALUES オプション ( を使用して JSON 出力に Null 値を含める。SQL Server ).For more info and examples, see Include Null Values in JSON Output with the INCLUDE_NULL_VALUES Option (SQL Server).

ルート [ ('RootName') ]ROOT [ ('RootName') ]
指定して、JSON 出力に単一の最上位要素を追加、ルートオプションは、 FOR JSON句。Add a single, top-level element to the JSON output by specifying the ROOT option with the FOR JSON clause. 指定しない場合、 ROOT オプションでは、JSON の出力はルート要素がないです。If you don't specify the ROOT option, the JSON output doesn't have a root element. 詳細と例については、次を参照してくださいROOT オプション ( で JSON 出力にルート ノードを追加。SQL Server ).For more info and examples, see Add a Root Node to JSON Output with the ROOT Option (SQL Server).

WITHOUT_ARRAY_WRAPPERWITHOUT_ARRAY_WRAPPER
指定することによって、既定では、JSON 出力を囲んでいる角かっこを削除、 WITHOUT_ARRAY_WRAPPERオプションは、 FOR JSON句。Remove the square brackets that surround the JSON output by default by specifying the WITHOUT_ARRAY_WRAPPER option with the FOR JSON clause. このオプションを指定しないと、JSON 出力が角かっこで囲まれます。If you don't specify this option, the JSON output is enclosed within square brackets. 使用して、 WITHOUT_ARRAY_WRAPPERを出力として単一の JSON オブジェクトを生成するオプションです。Use the WITHOUT_ARRAY_WRAPPER option to generate a single JSON object as output. 詳細については、「 WITHOUT_ARRAY_WRAPPER オプションを使用して JSON 出力から角かっこを削除する (SQL Server)For more info, see Remove Square Brackets from JSON Output with the WITHOUT_ARRAY_WRAPPER Option (SQL Server).

詳細については、「FOR JSON を使用してクエリ結果を JSON として書式設定する (SQL Server)」を参照してください。For more info, see Format Query Results as JSON with FOR JSON (SQL Server).

参照See Also

SELECT (Transact-SQL)SELECT (Transact-SQL)