2014-03-05 34 views
1

我有一個非常大的MSSQL數據庫,我想正確限制我的行。MSSQL中的LIMIT和TOP

我GOOGLE了周圍的SQL如下:

WITH SmallerFetch AS 
     (
      SELECT *, 
        ROW_NUMBER() OVER (ORDER BY columns) AS RowNumber 
      FROM dbo.table 
     ) 
    SELECT columns 
    FROM SmallerFetch 
    WHERE RowNumber BETWEEN {$offset} AND {$limit} 

現在,這個工程。但是,我在客戶端有一堆過濾器,並且希望不僅獲得位於偏移和限制之間的行。我希望獲得所有與SELECT * FROM table WHERE something LIKE '%mssql really needs a limit function%'等查詢相對應的行,但仍保留我的分頁功能。

我看過使用TOP和子句中的TOP,但它沒有工作,或者沒有爲我的搜索返回正確數量的行。

我在客戶端使用DataTables庫,它直接與我的響應(查詢)-script掛鉤(使用AJAX)。

我知道我可能錯過了這篇文章中的一些內容,但我會回答關於我的問題的評論和問題。爲什麼MSSQL不如MySQL那麼容易就超越了我。

回答

4

爲什麼不把篩選移到CTE?

所以像:

;WITH SmallerFetch AS 
(
    SELECT  columns, 
       ROW_NUMBER() OVER (ORDER BY columns) AS RowNumber 

    FROM  dbo.table 

    WHERE  something LIKE '%mssql really needs a limit function%' 
) 
SELECT columns 

FROM SmallerFetch 

WHERE RowNumber BETWEEN @offset AND @limit 
+0

你應該成爲總統。我怎麼沒有想到這一點。 – NicT