クエリ:
declare @X xml = '
<item ID = "0"/>
<item ID = "1"/>
<item/>
<item/>';
select I.X.value('@ID', 'int')
from @X.nodes('/item') as I(X);
結果:
-----------
0
1
NULL
NULL
実行計画:
上のブランチはXMLを4行に細断し、下のブランチは属性の値をフェッチしますID
。
奇妙に感じるのは、Stream Aggregateオペレーターから返される行の数です。Filterからの2つの行は、XMLのID
最初と2番目のitem
ノードの属性です。Stream Aggregateは、各入力行に1つずつ、4つの行を返し、内部結合を外部結合に効果的に変換します。
これは、Stream Aggregateが他の状況でも行うことですか、それともXMLクエリを実行するときに奇妙なことですか?
XMLバージョンのクエリプランで、このStream Aggregateの動作が以前に気付いた他のどのStream Aggregateとも異なるはずであるというヒントはありません。