2013-03-13 81 views
2

我有使用TOP和Order By的全文搜索。我在另一個數據庫中使用了相同的查詢,並且我的訂單始終保持不變。出於某種原因,在不同的數據庫中,訂單似乎總是有所變化。不是很多,但只是一點。這是它看起來像Order By子句似乎不起作用

SELECT TOP 20 * FROM 
(
SELECT DISTINCT CandidateID, [Resume], FirstName, MiddleName, LastName, 
     ROW_NUMBER() OVER (ORDER BY CreatedDate DESC) AS num 

     FROM dbo.tblCandidates WHERE (CONTAINS(([resume]), @SearchItem)) 

) AS a 
WHERE num > @start 

任何人都可以想到一個理由,在這種情況下Order By子句不會總是工作嗎?

謝謝!

+0

'CreatedDate'包含重複項? – 2013-03-13 01:24:59

+1

我很好奇,如果你的其他數據庫有'ORDER BY'列索引。你有沒有嘗試在你的WHERE下面添加一個'ORDER BY num'? – 2013-03-13 01:26:47

+0

您是否在同一數據上多次運行查詢時,結果的順序發生變化? – DeanOC 2013-03-13 01:28:10

回答

4

您沒有ORDER BY子句(OVER()子句中的子句用於確定ROW_NUMBER(),通常不會影響輸出的順序)。如果您在其他系統上查看了此查詢的特定順序,則這純粹是巧合,不應該依賴。如果你想要一個特定的訂單,你需要將ORDER BY添加到外部查詢中,不管你認爲它應該做什麼或者你在其他地方觀察到了什麼。

SELECT TOP 20 * FROM 
(
SELECT DISTINCT CandidateID, [Resume], FirstName, MiddleName, LastName, 
     ROW_NUMBER() OVER (ORDER BY CreatedDate DESC) AS num 

     FROM dbo.tblCandidates WHERE (CONTAINS(([resume]), @SearchItem)) 

) AS a 
WHERE num > @start 
ORDER BY num; 
+0

謝謝亞倫和邁克爾......就是這樣。對此,我真的非常感激。 – 2013-03-13 02:24:34