MSSQL中的LIMIT和TOP

时间:2014-03-05 12:38:49

标签: sql-server tsql

我有一个非常庞大的MSSQL数据库,我想正确限制我的行。

我用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%'这样的查询相对应的行,但仍保留我的分页能力。

我已经查看了使用TOPTOP子句中的FROM,但它没有工作,或者没有为我的搜索返回正确的行数。

我在客户端使用DataTables库用于jQuery,它直接连接(使用AJAX)到我的响应(查询)-script。

我知道我可能在这篇文章中遗漏了一些内容,但我会回答有关我的问题的评论和问题。为什么MSSQL不能像MySQL一样简单。

1 个答案:

答案 0 :(得分: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