Truy vấn:
declare @X xml = '
<item ID = "0"/>
<item ID = "1"/>
<item/>
<item/>';
select I.X.value('@ID', 'int')
from @X.nodes('/item') as I(X);
Kết quả:
-----------
0
1
NULL
NULL
Kế hoạch thực hiện:
Nhánh trên cùng cắt nhỏ XML thành bốn hàng và nhánh dưới cùng tìm nạp giá trị cho thuộc tính ID
.
Điều làm tôi ngạc nhiên là số lượng hàng được trả về từ toán tử Stream Aggregate. 2 hàng xuất phát từ Bộ lọc là ID
thuộc tính từ các nút đầu tiên và thứ hai item
trong XML. Tập hợp luồng trả về bốn hàng, một hàng cho mỗi hàng đầu vào, có hiệu quả biến Kết nối bên trong thành Tham gia ngoài.
Đây có phải là điều mà Stream Aggregate thực hiện trong các trường hợp khác không hay nó chỉ là một điều kỳ quặc xảy ra khi thực hiện các truy vấn XML?
Tôi không thể thấy bất kỳ gợi ý nào trong phiên bản XML của kế hoạch truy vấn rằng Tập hợp luồng này sẽ hoạt động khác với bất kỳ Tập hợp luồng nào khác mà tôi đã nhận thấy trước đây.