Abfrage:
declare @X xml = '
<item ID = "0"/>
<item ID = "1"/>
<item/>
<item/>';
select I.X.value('@ID', 'int')
from @X.nodes('/item') as I(X);
Ergebnis:
-----------
0
1
NULL
NULL
Ausführungsplan:
Der obere Zweig zerlegt das XML in vier Zeilen und der untere Zweig ruft den Wert für das Attribut ab ID
.
Was mir seltsam erscheint, ist die Anzahl der vom Stream Aggregate-Operator zurückgegebenen Zeilen. Die 2 Zeilen, die vom Filter stammen, sind das ID
Attribut vom ersten und zweiten item
Knoten im XML. Das Stream-Aggregat gibt vier Zeilen zurück, eine für jede Eingabezeile, wodurch die innere Verknüpfung effektiv in eine äußere Verknüpfung umgewandelt wird.
Ist dies etwas, was Stream Aggregate auch unter anderen Umständen tut, oder ist es nur etwas Seltsames, wenn XML-Abfragen ausgeführt werden?
Ich kann in der XML-Version des Abfrageplans keine Hinweise darauf sehen, dass sich dieses Stream-Aggregat anders verhalten sollte als jedes andere Stream-Aggregat, das ich zuvor bemerkt habe.
quelle