Order By Clause似乎无效

时间:2013-03-13 01:21:48

标签: sql sql-server stored-procedures

我有一个使用TOP和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子句在这种情况下不会一直有效的原因吗?

谢谢!

1 个答案:

答案 0 :(得分: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;