返される XML を構造化する際の AUTO モード ヒューリスティック

適用対象:SQL ServerAzure SQL Database Not supported.Azure Synapse Analytics Not supported. Analytics Platform System (PDW)

AUTO モードでは、返される XML の構造はクエリに基づいて決定されます。 要素を入れ子にする方法を決定するとき、AUTO モード ヒューリスティックによって、隣接する行の列値が比較されます。 ntext型、 text型、 image型、および xml型を除くすべての型の列が比較されます。 (n)varchar(max) 型と varbinary(max) 型の列は比較されます。

次の例では、生成される XML の構造を決定する AUTO モード ヒューリスティックを示します。

SELECT T1.Id, T2.Id, T1.Name
FROM   T1, T2
WHERE Col1 = 1 /* actual predicate goes here*/
ORDER BY T1.Id
FOR XML AUTO;

テーブル T1 のキーが指定されていない場合は、新しい <T1> 要素の開始位置を決定するために、ntext 型、text 型、image 型、および xml 型を除く T1 の列のすべての値が比較されます。 次に、 Name 列が nvarchar(40) 型で、SELECT ステートメントから次の行セットが返されるとします。

T1.Id  T1.Name  T2.Id
-----------------------
1       Andrew    2
1       Andrew    3
1       Nancy     4

AUTO モード ヒューリスティックにより、テーブル T1 のすべての値 (Id 列と Name 列) が比較されます。 最初の 2 行の Id 列および Name 列の値は同じです。 その結果、2 つの <T2> 子要素を持つ 1 つの <T1> 要素が結果に追加されます。

次に、返される XML を示します。

<T1 Id="1" Name="Andrew">
    <T2 Id="2" />
    <T2 Id="3" />
</T1>
<T1 Id="1" Name="Nancy" >
      <T2 Id="4" />
</T>

ここで、Name 列は text 型であるとします。 この型の値は、AUTO モード ヒューリスティックによって比較されません。 この場合、値が異なると想定されます。 このモードの結果、次の出力に示すように XML が生成されます。

<T1 Id="1" Name="Andrew" >
  <T2 Id="2" />
</T1>
<T1 Id="1" Name="Andrew" >
  <T2 Id="3" />
</T1>
<T1 Id="1" Name="Nancy" >
  <T2 Id="4" />
</T1>

関連項目