我有一個CLR聚合級聯功能,類似於https://gist.github.com/FilipDeVos/5b7b4addea1812067b09數串的不同序列。當行數很少時,連接字符串的順序跟隨輸入數據集。當行數較大(幾十個甚至更多)時,序列似乎不確定。有一個在執行計劃的不同,但我不認爲熟悉的優化和什麼提示申請(我試過MAXDOP 1,沒有成功)。從不同的測試中得到類似的結果,下面的例子似乎是計劃中的差異 - 單獨排序,然後是合併連接。它打翻了這裏的行數爲60Sql Server的骨料串連CLR返回基於的記錄
下面是與演示問題在AdventureWorks2014示例數據庫中查詢上面的clr(重命名爲TestConcatenate)。預期的結果是一個數據集,每個訂單都有一個行,並且一個列中包含按數量順序排列的該訂單的產品分隔列表。
;with cte_ordered_steps AS (
SELECT top 100000 sd.SalesOrderID, SalesOrderDetailID, OrderQty
FROM [Sales].[SalesOrderDetail] sd
--WHERE sd.SalesOrderID IN (53598, 53595)
ORDER BY sd.SalesOrderID, OrderQty
)
select
sd.SalesOrderID,
dbo.TestConcatenate(' QTY: ' + CAST(sd.OrderQty AS VARCHAR(9)) + ': ' + IsNull(p.Name, ''))
FROM [Sales].[SalesOrderDetail] sd
JOIN [Production].[Product] p ON p.ProductID = sd.ProductID
JOIN cte_ordered_steps r ON r.SalesOrderID = sd.SalesOrderID AND r.SalesOrderDetailID = sd.SalesOrderDetailID
where sd.SalesOrderID IN (53598, 53595)
GROUP BY sd.SalesOrderID
當的SalesOrderID的CTE被限制爲53598,53595,順序正確的是(頂部設置),當它在main中的約束選擇53598,53595,該序列不是(鈕一組)。
那麼,什麼是我的問題嗎?我如何構建查詢,並使用提示或其他更改來返回與行數無關的一致(和正確)排序的連續值。