查询:
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切成四行,底部分支获取该属性的值ID
。
让我感到奇怪的是,从Stream Aggregate运算符返回的行数。来自筛选器的2行是XML中ID
第一个和第二个item
节点的属性。流聚合返回四行,每一输入行一个,有效地将“内部联接”转换为“外部联接”。
这是否也是Stream Aggregate在其他情况下所做的事情,还是在进行XML查询时发生的奇怪事情?
我在查询计划的XML版本中看不到任何暗示,此Stream Aggregate的行为应与我之前注意到的任何其他Stream Aggregate有所不同。