SQL Server:TOP子句有替代品吗?

时间:2012-08-23 10:59:32

标签: sql-server database jqgrid pagination

  

可能重复:
  Equivalent of LIMIT and OFFSET for SQL Server?

我正在制作一个目前包含2500行的表格,将来会越来越多。

我正在使用jqgrid来显示数据库中的记录。

每当网格加载时,我都会从数据库中检索top 500行。但是,当我开始在网格中使用分页时,记录的数量正在增加。

示例:首先行数为TOP 100,然后转到下一页,其增加到TOP 200,依此类推。

现在我想要一个解决方案来避免这个问题,这样我就可以限制行而不是根据网格检索前n行。假设使用范围或LIMIT

示例

当我导航到网格中的下一页时,而不是TOP 200行,我想要从101到200获取行

 select top 500
        exe.id,
        bat.BName,
        bat.tid,
        bat.freq,
        exe.status,
        exe.Msg,
        exe.time,
        exe.Fi
    from
       XXX exe,
        YYY bat 
    where
        exe.id=bat.id   
    order by     
        CONVERT(VARCHAR(10),
        exe.time,
        120) DESC,
        exe.status,
        exe.id DESC

请指导我,因为我是jQGrid的新手并且不太了解如何处理这个DB相关的东西

我在Stackoverflow中也引用了一些链接,但无法理解

提前致谢

1 个答案:

答案 0 :(得分:5)

您可以使用ROW_NUMBER(),在查询数据之前未分配row_number(),因此如果您想要按row_number()值检索数据,则需要使用{ {1}}或子选择以获取在CTE子句中使用的值。

WHERE

我还建议您更改SELECT * FROM ( select exe.id, bat.BName, bat.tid, bat.freq, exe.status, exe.Msg, exe.time, exe.Fi, row_number() over(order by CONVERT(VARCHAR(10), exe.time, 120) DESC, exe.status, exe.id DESC) rn from XXX exe, YYY bat where exe.id=bat.id ) x WHERE rn between 101 and 200 语法以使用ANSI语法:

JOIN