我有一个非常庞大的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%'
这样的查询相对应的行,但仍保留我的分页能力。
我已经查看了使用TOP
和TOP
子句中的FROM
,但它没有工作,或者没有为我的搜索返回正确的行数。
我在客户端使用DataTables库用于jQuery,它直接连接(使用AJAX)到我的响应(查询)-script。
我知道我可能在这篇文章中遗漏了一些内容,但我会回答有关我的问题的评论和问题。为什么MSSQL不能像MySQL一样简单。
答案 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