我從數據庫列表中獲得按降序排列的項目。
我使用ROW_NUMBER()
函數來獲得50個50個項目。
第一次我需要從1-50中獲得的項目比51-100等。
我有數據庫項目類型1,這些都是我得到的項目。
數據庫中有成千上萬個項目。
所以當我第一次調用存儲過程時,我把它傳遞給第一個數(從哪個項目中獲得下一個50)。
所以這應該返回我前50項。現在我添加到條款RowNum < 1+50
,但是我從查詢中得到的行號是:35,37,38,43,44,45,55,67
等,所以我的存儲過程僅返回35 to 45
中的項目。 我想我在我的查詢中犯了一些愚蠢的錯誤,但找不到它。ROW_NUMBER()不會返回第一次良好的項目數
SELECT *
FROM (SELECT ROW_NUMBER() OVER (ORDER BY Products.CreatedOnDate DESC) AS RowNum, Products.*
FROM Products
WHERE Products.CreatedOnDate <= GETDATE()
) AS RowConstrainedResult
WHERE RowNum >= 1
AND RowNum < 1+50 -- here I use parameter but currently I hardcode '1'
AND ProductTypeId = 1
ORDER BY RowNum
看來你要白坯分頁?爲什麼你不只是使用TOP 50,而在下一個你做TOP 100的時候,然後是TOP 50,然後改變訂單。 – YvesR 2012-04-01 11:42:13
我不知道。老開發人員告訴我,使用ROW_NUMBER()會更好,但如果沒有性能問題,我可以使用TOP X. @Mitch小麥:你說什麼代碼? – 1110 2012-04-01 11:49:22
請閱讀這篇文章(http://blogs.msdn.com/b/conor_cunningham_msft/archive/2012/02/02/conor-vs-window-functions-sequence-ranking-functions-order-of-operations.aspx)康納爾坎寧安寫的。 – 2012-04-01 12:17:31