2013-03-13 132 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