Query:
declare @X xml = '
<item ID = "0"/>
<item ID = "1"/>
<item/>
<item/>';
select I.X.value('@ID', 'int')
from @X.nodes('/item') as I(X);
Risultato:
-----------
0
1
NULL
NULL
Progetto esecutivo:
Il ramo superiore distrugge l'XML su quattro righe e il ramo inferiore recupera il valore per l'attributo ID.
Ciò che mi sembra strano è il numero di righe restituite dall'operatore Stream Aggregate. Le 2 righe che provengono dal filtro sono l' IDattributo del primo e del secondo itemnodo nell'XML. Stream Aggregate restituisce quattro righe, una per ogni riga di input, trasformando efficacemente il Join interno in un Join esterno.
È qualcosa che Stream Aggregate fa anche in altre circostanze o è qualcosa di strano quando si fanno query XML?
Non riesco a vedere alcun suggerimento nella versione XML del piano di query secondo cui questo Stream Aggregate dovrebbe comportarsi in modo diverso rispetto a qualsiasi altro Stream Aggregate che ho notato prima.
