2009-12-31 69 views
0

我有一個SELECT查詢,產生多個結果,並沒有任何ORDER BY子句。 如果我多次執行這個查詢,然後使用DataReader.NextResult()遍歷結果,我會保證以相同的順序得到結果嗎?是否DataReader.NextResult檢索結果始終是相同的順序

例如,如果我執行以下查詢返回199行:

SELECT * FROM products WHERE productid < 200 

我會總是得到與productid = 1等第一個結果?

據我觀察到它總是以相同的順序返回結果,但我找不到這種行爲的任何文檔。

======================================

按我的研究: 看看這個博客Conor vs. SQL。我實際上想詢問即使表中的數據保持不變(即沒有更新或刪除),查詢結果是否也會發生變化。但似乎在大型表的情況下,當SQL服務器的員工並行時,訂單可能不同

回答

7

首先,要迭代DataReader中的行,應該調用Read而不是NextResult
如果您的查詢有多個SELECT語句,調用NextResult將移至下一個結果集。

要回答你的問題,你不能依賴這個。
沒有ORDER BY子句的查詢將返回SQL Server默認迭代順序中的行。
對於小型表格,這將是通常是是添加行的順序,但這不能保證,並且隨時都可能發生變化。例如,如果表被索引或分區,則順序將不同。

3

不,DataReader將按照它們從SQL返回的順序返回結果。如果您不指定ORDER BY子句,那將是它們在表中存在的順序。

+0

我同意羅裏。如果你想按照特定的順序,那麼你應該在你的SQL語句中添加一個Order By。 – Walter 2009-12-31 13:51:05

1

這是可能的,或許甚至可能他們總是以相同的順序返回,但這並不能保證。該順序由數據庫服務器上的queryplan(至少在SQL Server中)確定。如果某件事改變了查詢計劃,那麼訂單可能會改變。如果結果的順序對於處理數據非常重要,則應始終使用ORDER BY。

相關問題