【问题标题】:Pagination query for mssql server 2008 Throwing Incorrect syntax near 'OFFSET'mssql server 2008 的分页查询在“OFFSET”附近抛出不正确的语法
【发布时间】:2013-03-11 22:45:25
【问题描述】:

我正在使用 jsp 进行分页(而且我是编写 sql 的新手)。

我做了研究,发现了来自

的简单查询

pagination in SQL server 2008How to do pagination in SQL Server 2008

SELECT * FROM document  ORDER BY id OFFSET
                    "+iPageNo+"  ROWS FETCH NEXT 10 ROWS ONLY;

在上面的查询中 ipageNo 是第一次为 0(即使我尝试手动输入 1)

还是报错Incorrect syntax near 'OFFSET'.

我在这里错过了什么?提前致谢。

【问题讨论】:

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


    【解决方案1】:

    您会从ORDER BY Clause (Transact-SQL) 中注意到 SQL Server 2008 不支持此语法。

    你可以从2008年的文档中看到

    **Syntax**
    
    [ ORDER BY 
        {
        order_by_expression 
      [ COLLATE collation_name ] 
      [ ASC | DESC ] 
        } [ ,...n ] 
    ]
    

    2012 documentation在哪里

    **Syntax**
    ORDER BY order_by_expression
        [ COLLATE collation_name ] 
        [ ASC | DESC ] 
        [ ,...n ] 
    [ <offset_fetch> ]
    
    
    <offset_fetch> ::=
    { 
        OFFSET { integer_constant | offset_row_count_expression } { ROW | ROWS }
        [
          FETCH { FIRST | NEXT } {integer_constant | fetch_row_count_expression } { ROW | ROWS } ONLY
        ]
    }
    

    也许也可以看看how to do pagination in sql server 2008

    【讨论】:

    • 感谢您的信息。但有趣的一点是 ORDER BY 对我有用。
    • 是的,order by 可以正常工作,它是分页部分,只有在 SQL SERVER 2008 之后才可用
    • 啊..经过一些解决方法后,我发现了一些查询并发布在此处。如果可能,请您检查一次吗?
    【解决方案2】:

    这是我的工作,现在工作正常。

    SELECT * FROM   (SELECT ROW_NUMBER() OVER(ORDER BY id) AS rownumber,*
            FROM document)  as somex  WHERE  rownumber >= (1+1)*10-9
                             AND rownumber <=(1+1)*10
    

    在上述查询中,我将 (1+1) 替换为 (pageNUmber+1)

    如果有任何优雅的方式可用,请随时建议我。

    【讨论】:

    • 嗨,我们如何将 order by 添加到查询中?我试过了。它给了我一个错误,说“ORDER BY 子句在视图、内联函数、派生表、子查询和公用表表达式中无效,除非还指定了 TOP 或 FOR XML。”是否可以有像“Group By and Order By”这样的聚合函数?
    【解决方案3】:

    我希望this 会有所帮助(适用于 SQL Server 2008)。

    【讨论】:

    • +1 。感谢@msi 的链接。我会试试的。也看看我的答案。
    【解决方案4】:
    DECLARE @Page int
    SET @Page = 2
    DECLARE @Amount int
    SET @Amount = 25
    SELECT * FROM (
    SELECT ROW_NUMBER() OVER(ORDER BY group_id) AS rownumber, * FROM table_name 
    WHERE Column LIKE '%Search_Value%') as somex  
    WHERE  rownumber >= (@Page+1)* @Amount-(@Amount - 1) AND rownumber <= (@Page+1) * @Amount
    

    我更进一步。添加了一些变量以使输入信息更好一些。在我的公司,我们有较旧的数据库,所以这个提要对我有很大帮助。

    【讨论】:

      猜你喜欢
      • 2017-01-08
      • 2015-09-12
      • 2021-09-26
      • 2017-07-04
      • 1970-01-01
      • 2015-07-27
      • 2013-11-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多