2

我有一个使用 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 子句在这种情况下并不总是有效的原因?

谢谢!

4

1 回答 1

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;
于 2013-03-13T02:11:52.620 回答