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