【问题标题】:How to achieve pagination in SQL Server 2008 with like statement如何在 SQL Server 2008 中使用 like 语句实现分页
【发布时间】:2016-09-03 01:26:49
【问题描述】:

我对分页结果的查询是

SELECT
    *
FROM 
    (SELECT
         ROW_NUMBER() OVER (ORDER BY Id DESC) AS RowNum,
         *
     FROM 
         My_Table) AS RowConstrainedResult
WHERE 
    (RowNum >= 1 AND RowNum <= 10)
ORDER BY 
    RowNum

这很好用。但是,当我尝试使用 like 语句搜索搜索结果时,它不起作用。

搜索查询

SELECT
    *
FROM 
    (SELECT
         ROW_NUMBER() OVER (ORDER BY Id DESC) AS RowNum,
         *
     FROM 
         My_Table) AS RowConstrainedResult
WHERE 
    column1 LIKE '%search%'
    AND (RowNum >= 1 AND RowNum <= 10)
ORDER BY 
    RowNum

如果前 10 行不包含搜索值,则返回 0 结果而不是查找完整表。我不能使用 offset 和 fetch,因为它在 SQL Server 2008 中不支持。

任何更好的分页方式在 SQL Server 2008 中都可以正常工作

谢谢

【问题讨论】:

  • 我已经格式化了你的问题,发现你的第二个查询在(RowNum &gt;= 1之前缺少运算符;我添加了AND,但您可以检查其正确性。
  • 谢谢,但这不是问题
  • 我不接受这个问题;我是说我添加了一些不存在的内容,因此您可以回顾并使用正确的详细信息更新您的问题以获得正确答案!

标签: sql-server sql-server-2008 pagination


【解决方案1】:

你真的很接近......我会使用 CTE 进行过滤,然后从中选择你的 10 行。

;WITH X AS
(
    SELECT ROW_NUMBER() OVER (ORDER BY Id DESC) AS RowNum, *
    FROM My_Table 
    WHERE column1 LIKE '%search%'
)

SELECT *
FROM X
WHERE RowNum BETWEEN 1 AND 10
ORDER BY RowNum

根据您的情况,您也许可以轻松逃脱:

SELECT TOP 10 *,  ROW_NUMBER() OVER (ORDER BY Id DESC) AS RowNum
FROM My_Table 
WHERE column1 LIKE '%search%'
ORDER BY RowNum

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-01
    • 2012-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多