2013-02-26 86 views
1

我有一個有趣的問題: 我有一個函數可以得到逗號分隔的整數字符串。選擇的結果順序

這裏是2個處決:

select ID from dbo.udf_NumList2table ('124,126,132,180,176') 
select RP.ID, My.ID 
from dbo.udf_NumList2table ('124,126,132,180,176') RP join MyTable My 
     on RP.ID=My.ID 

在第一執行結果的順序是這樣的字符串中的編號的順序。 在第二次執行中,結果的順序是升序(180之前的176)。

爲什麼?我猜想MyTable中列ID的PK是原因--SQL更喜歡在密鑰上運行。

對不對?

回答

2

選擇保證不排序的結果,所以你的結果甚至不保證每次運行時都是一樣的,但在你的情況下,因爲數據太小,它們將是相同的。順序對於優化器來說是最方便的,所以你的猜測在這裏可能是正確的。

對於更高數據量的查詢可以跨不同的執行線程進行拆分,因此給出更混亂的順序,並且根據服務器上的工作負載可能會因運行而有所不同。

要獲得一致的訂單,您必須使用ORDER BY條款。