FOR 句は、BROWSE オプションまたは XML オプションを指定するときに使用します。BROWSE オプションと XML オプションには、関連性はありません。
重要 : |
|---|
|
FOR XML オプションに対する XMLDATA ディレクティブの使用は推奨されません。RAW モードと AUTO モードの場合は、XSD 世代を使用してください。EXPLICIT モードでは、XMLDATA ディレクティブに代わる機能はありません。この機能は、将来のバージョンの Microsoft SQL Server では削除される予定です。新しい開発作業では、この機能の使用を避け、現在この機能を使用しているアプリケーションは修正するようにしてください。
|
Transact-SQL 構文表記規則
[ FOR { BROWSE | <XML> } ]
<XML> ::=
XML
{
{ RAW [ ( 'ElementName' ) ] | AUTO }
[
<CommonDirectives>
[ , { XMLDATA | XMLSCHEMA [ ( 'TargetNameSpaceURI' ) ] } ]
[ , ELEMENTS [ XSINIL | ABSENT ]
]
| EXPLICIT
[
<CommonDirectives>
[ , XMLDATA ]
]
| PATH [ ( 'ElementName' ) ]
[
<CommonDirectives>
[ , ELEMENTS [ XSINIL | ABSENT ] ]
]
}
<CommonDirectives> ::=
[ , BINARY BASE64 ]
[ , TYPE ]
[ , ROOT [ ( 'RootName' ) ] ]
- BROWSE
-
DB-Library ブラウズ モード カーソルでデータを表示しているときに、更新が許可されます。テーブルに timestamp 列が含まれる場合、テーブルに一意なインデックスがある場合、および SQL Server に送られる SELECT ステートメントの最後に FOR BROWSE オプションがある場合、アプリケーションの中でテーブルを参照できます。
メモ : |
|---|
|
<lock_hint> HOLDLOCK は、FOR BROWSE オプションを含む SELECT ステートメントでは使えません。
|
FOR BROWSE は、UNION 演算子によって結合された SELECT ステートメントでは使えません。
メモ : |
|---|
|
テーブルの一意なインデックス キー列が NULL 値を許容し、かつそのテーブルが外部結合の内部にある場合、そのインデックスはブラウズ モードではサポートされません。
|
ブラウズ モードを使用すると、SQL Server テーブルの行をスキャンし、テーブルのデータを 1 回に 1 行ずつ更新できます。アプリケーションのブラウズ モードで SQL Server テーブルにアクセスするには、次の 2 つのオプションのいずれかを使用する必要があります。
-
SQL Server テーブルのデータにアクセスするために使用する SELECT ステートメントは FOR BROWSE キーワードで終了する必要があります。FOR BROWSE オプションをオンにしてブラウズ モードを使用すると、一時テーブルが作成されます。
-
NO_BROWSETABLE オプションを使用してブラウズ モードをオンにするには、次の Transact-SQL ステートメントを実行する必要があります。
NO_BROWSETABLE オプションをオンにすると、すべての SELECT ステートメントは FOR BROWSE オプションがステートメントに追加されたかのように動作します。ただし、NO_BROWSETABLE オプションでは、FOR BROWSE オプションが通常結果をアプリケーションに送信する際に使用する一時テーブルが作成されません。
外部結合ステートメントが関与する SELECT クエリを使用してブラウズ モードで SQL Server テーブルのデータにアクセスしようとしたときに、外部結合ステートメントの内部のテーブルに一意のインデックスが定義されている場合、この一意のインデックスはブラウズ モードでサポートされません。ブラウズ モードで一意のインデックスがサポートされるのは、すべての一意のインデックス キー列が NULL 値を使用できる場合のみです。次の条件に当てはまる場合は、ブラウズ モードで一意のインデックスがサポートされません。
-
外部結合ステートメントを含む SELECT クエリを使用して、ブラウズ モードで SQL Server テーブルのデータにアクセスしようとした場合。
-
外部結合ステートメントの内部に存在するテーブルに一意のインデックスが定義されている場合。
ブラウズ モードでこの動作を再現するには、以下の手順を実行します。
-
SQL Server Management Studio で、SampleDB という名前のデータベースを作成します。
-
SampleDB データベースに tleft テーブルと tright テーブルを作成し、両方に c1 という単一列が含まれるようにします。tleft テーブルの c1 列に一意のインデックスを定義し、この列が NULL 値を許容するように設定します。このためには、適切なクエリ ウィンドウで次の Transact-SQL ステートメントを実行します。
CREATE TABLE tleft(c1 INT NULL UNIQUE) ;
GO
CREATE TABLE tright(c1 INT NULL) ;
GO
-
tleft テーブルと tright テーブルに複数の値を挿入します。tleft テーブルに NULL 値を挿入します。このためには、クエリ ウィンドウで次の Transact-SQL ステートメントを実行します。
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
-
NO_BROWSETABLE オプションをオンにします。このためには、クエリ ウィンドウで次の Transact-SQL ステートメントを実行します。
SET NO_BROWSETABLE ON ;
GO
-
SELECT クエリで外部結合ステートメントを使用して、tleft テーブルと tright テーブルのデータにアクセスします。tleft テーブルが外部結合ステートメントの内部に存在することを確認します。このためには、クエリ ウィンドウで次の Transact-SQL ステートメントを実行します。
SELECT tleft.c1
FROM tleft
RIGHT JOIN tright
ON tleft.c1 = tright.c1
WHERE tright.c1 <> 2 ;
[結果] ペインに、次の出力が表示されます。
c1
----
NULL
NULL
ブラウズ モードで SELECT クエリを実行してテーブルにアクセスすると、右外部結合ステートメントの定義に従い、SELECT クエリの結果セットに tleft テーブルの c1 列の NULL 値が 2 つ格納されます。したがって、結果セットではテーブルの NULL 値、および右外部結合ステートメントによって提供された NULL 値を区別できません。結果セットの NULL 値を無視しなければならない場合、正しくない結果が返されることがあります。
メモ : |
|---|
|
一意のインデックスに含まれる列で NULL 値を使用できない場合は、結果セットの NULL 値がすべて右外部結合ステートメントによって提供されます。
|
- XML
-
クエリの結果を XML ドキュメントとして返します。RAW、AUTO、EXPLICIT のいずれかの XML モードを指定する必要があります。XML データおよび SQL Server の詳細については、「FOR XML を使用した XML の構築」を参照してください。
- RAW [ ('ElementName') ]
-
クエリの結果を取得し、結果セット内の各行を、要素タグとして汎用識別子 <row /> が指定されている XML 要素に変換します。必要に応じて、その行要素に名前を指定することもできます。変換結果の XML 出力では、各行に対して生成された行要素として、指定した ElementName が使用されます。詳細については、「RAW モードの使用」および「RAW モードの使用」を参照してください。
- AUTO
-
クエリの結果を単純な入れ子の XML ツリーで返します。FROM 句に含まれる各テーブルは、そのうち少なくとも 1 つの列が SELECT 句の一覧に示され、XML 要素として表されます。SELECT 句に一覧されている列は、該当する要素属性にマップされます。詳細については、「AUTO モードの使用」を参照してください。
- EXPLICIT
-
結果として得られる XML ツリーの形状を明示的に定義することを指定します。このモードを使用する場合は、目的の入れ子に関する追加の情報を明示的に指定できるように、クエリを特別な方法で記述する必要があります。詳細については、「EXPLICIT モードの使用」を参照してください。
- XMLDATA
-
インライン XDR スキーマを返します。ただし、結果にルート要素は追加されません。XMLDATA を指定すると、XDR スキーマはドキュメントに追加されます。
- XMLSCHEMA [ ('TargetNameSpaceURI') ]
-
インライン XSD スキーマを返します。このディレクティブを指定する場合は、必要に応じて、対象名前空間の URI を指定することもできます。指定した場合は、スキーマにある指定した名前空間が返されます。詳細については、「インライン XSD スキーマの生成」を参照してください。
- ELEMENTS
-
列を副要素として返します。指定していない場合は、XML 属性にマップされます。このオプションは、RAW、AUTO、および PATH モードでのみサポートされます。詳細については、「RAW モードの使用」を参照してください。
- XSINIL
-
列の値が NULL の場合、xsi:nil 属性が True に設定されている要素を作成します。このオプションは、ELEMENTS ディレクティブでのみ指定できます。詳細については、「XSINIL パラメータを使用した NULL 値に対する要素の生成」を参照してください。
- ABSENT
-
列の値が NULL の場合、対応する XML 要素を XML 結果に追加しません。このオプションは、ELEMENTS でのみ指定してください。
- PATH [ ('ElementName') ]
-
結果セットの各行に対して <row> 要素ラッパーを生成します。必要に応じて、<row> 要素ラッパーに要素名を指定することもできます。FOR XML PATH ('') ) などの空文字列を指定すると、ラッパー要素は生成されません。EXPLICIT ディレクティブを使用するよりも、PATH を使用した方が、クエリが単純になる場合があります。詳細については、「PATH モードの使用」を参照してください。
- BINARY BASE64
-
クエリは、バイナリ データをバイナリ ベース 64 エンコード形式で返します。RAW モードおよび EXPLICIT モードでバイナリ データを取得する場合は、このオプションを指定する必要があります。AUTO モードの場合は、これは既定値です。
- TYPE
-
クエリは、結果を xml 型として返します。詳細については、「FOR XML クエリの TYPE ディレクティブ」を参照してください。
- ROOT [ ('RootName') ]
-
単一のトップレベル要素を、結果として生成される XML に追加します。必要に応じて、生成するルート要素名を指定することもできます。オプションのルート名を指定しない場合は、既定の <root> 要素が追加されます。
次の例では、FOR XML AUTO を TYPE オプションおよび XMLSCHEMA オプションと共に指定しています。TYPE オプションを指定しているため、結果セットはクライアントに xml 型として返されます。XMLSCHEMA オプションは、返される XML データにインライン XSD スキーマが含まれることを指定し、ELEMENTS オプションは、結果の XML が要素中心であることを指定します。
関連項目
SELECT (Transact-SQL)
その他の技術情報
FOR XML を使用した XML の構築
ヘルプおよび情報
SQL Server 2008 の参考資料の入手