질문:
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 연산자에서 반환 된 행 수입니다. 필터에서 나오는 2 개의 행 은 XML ID
의 첫 번째 item
노드 와 두 번째 노드 의 속성입니다 . 스트림 집계는 입력 행마다 하나씩 4 개의 행을 반환하여 내부 조인을 외부 조인으로 효과적으로 전환합니다.
이것이 Stream Aggregate가 다른 상황에서도 수행하는 것입니까, 아니면 XML 쿼리를 수행 할 때 이상한 일입니까?
XML 버전의 쿼리 계획에서이 Stream Aggregate가 이전에 주목 한 다른 Stream Aggregate와 다르게 동작해야한다는 힌트를 볼 수 없습니다.