我们有多个MSSQL服务器具有相同的数据库副本,下面的查询返回所有服务器的有效顺序(除了一个),我仔细检查了表的设计和所有外观除了几台服务器之外,其他部分都缺少索引。由学说一个MS SQL服务器为查询返回错误订单
WITH dctrn_cte AS (
SELECT TOP 10 a0_.Priority
FROM PROJECTS a0_
WHERE a0_.ProjectID = 1234
AND (a0_.Check1 > 0
OR
a0_.Check2 > 0)
AND a0_.Active = 1
ORDER BY a0_.Priority DESC)
SELECT *
FROM (
SELECT *, ROW_NUMBER()
OVER (ORDER BY (SELECT 0)) AS doctrine_rownum FROM dctrn_cte
) AS doctrine_tbl
WHERE doctrine_rownum BETWEEN 1 AND 10 ORDER BY doctrine_rownum ASC
产生
查询中的每个查询的是,特定的服务器上执行时,它给出了一个随机的顺序 - 它完全忽略了ORDER BY部分。
哪个'order by'?三者中唯一有意义的是第一个选择10行。正如行编号中使用的那样,因此在最后的顺序中使用的是完全不确定的,并且不保证任何东西。 –
你为什么使用'SELECT 0'?你认为会发生什么? –