我們有多個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'?你認爲會發生什麼? –