2011-08-26 70 views
1

有人能解釋這兩個簡單的查詢之間前行數和查詢後

SET ROWCOUNT = 10 
select * from t_Account order by account_date_last_maintenance 

而這一次

select * from t_Account order by account_date_last_maintenance 
SET ROWCOUNT = 10 

在執行時都返回只有10行的差異......,但是行有不同。如果重要的話,表格中有數百萬行。而且,第一個查詢的運行時間一直延長20%。

謝謝大家

回答

3

當你執行SET ROWCOUNT 10你告訴SQL返回10個結果之後停止查詢。你的第一條SQL語句是正確的語法(除了第一行應該讀取SET ROWCOUNT 10)。

寫入的第二條語句將返回最初執行時排序的所有值,然後將行數設置爲10,因此任何後續執行都將返回前10個條目。

必須將ROWCOUNT設置爲0才能使事情回到「正常」執行狀態。

至於爲什麼事情返回的方式不同,每次處理的數據可能都不一樣,並且考慮到數據集的大小,最有可能有時會得到匹配的結果,但這不是確定的事情。如果你想得到一致的結果,並只想要前10個結果,我會推薦使用TOP。

+0

你是對的語法,對不起,我在這裏急匆匆地輸入它,並添加了=。至於結果,我可能會誤解,但你似乎在說如果我執行第二個陳述,我會第一次得到10行,而第二次只有10行。這不是我所看到的,當我執行第二條語句時,第一次運行結果集時我只得到10行。我錯過了什麼嗎? – Chris

+0

試試這個。鍵入SET ROWCOUNT 0然後複製並粘貼第二條語句並執行。它應該返回超過10行。然後再次運行第二條語句,您應該只返回10行。 SET ROWCOUNT會被重新計算,您需要在打開它後禁用它。 –

+0

我做了你的建議,它像你說的那樣工作。當我測試和混淆我時,我想它只是「保留」了另一個值。感謝您的解釋。 – Chris