Sql 按条款排序似乎不起作用
我有一个利用TOP和orderby的全文搜索。我在另一个数据库中使用了相同的查询,并且我的顺序始终保持不变。由于某些原因,在不同的数据库上,顺序似乎总是有一些变化。不是很多,只是一点点。这是它的样子Sql 按条款排序似乎不起作用,sql,sql-server,stored-procedures,Sql,Sql Server,Stored Procedures,我有一个利用TOP和orderby的全文搜索。我在另一个数据库中使用了相同的查询,并且我的顺序始终保持不变。由于某些原因,在不同的数据库上,顺序似乎总是有一些变化。不是很多,只是一点点。这是它的样子 SELECT TOP 20 * FROM ( SELECT DISTINCT CandidateID, [Resume], FirstName, MiddleName, LastName, ROW_NUMBER() OVER (ORDER BY CreatedDate DESC)
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
有人能想出在这种情况下ORDERBY子句不总是起作用的原因吗
谢谢 您没有一个
ORDER BY
子句(OVER()
子句中的一个用于确定行数()
,通常对输出的顺序没有任何影响)。如果您在其他系统上观察到此查询的特定顺序,那么它完全是巧合,不应该依赖。如果您想要一个特定的订单,您需要将orderby
添加到外部查询中,无论您认为它应该做什么,或者您在其他地方观察到了什么
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;
您没有一个
orderby
子句(OVER()
子句中的一个用于确定行数()
并且通常不会对输出的顺序产生任何影响)。如果您在其他系统上观察到此查询的特定顺序,那么它完全是巧合,不应该依赖。如果您想要一个特定的订单,您需要将orderby
添加到外部查询中,无论您认为它应该做什么,或者您在其他地方观察到了什么
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;
CreatedDate
包含重复项?我很好奇您的另一个数据库是否索引了orderby
列。您是否尝试过在WHERE下方添加一个orderbynum
?查询中缺少它。除非使用Order by
指定,否则不能保证行的顺序Row_number()over()
本身不强制行的顺序;它只是分配数字。将orderbynum
追加到查询中。CreatedDate
包含重复项?我很好奇您的其他数据库是否对orderbynum
列进行了索引。您是否尝试过在WHERE下方添加一个orderbynum
?查询中缺少它。除非使用Order by
指定,否则不能保证行的顺序Row_number()over()
本身不强制行的顺序;它只是分配数字。在查询中追加orderbynum
。谢谢Aaron和Michael。。。就这样。我真的很感激。谢谢亚伦和迈克尔。。。就这样。我真的很感激。