首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于asp.net网格分页的SQL查询

问用于asp.net网格分页的SQL查询
EN

Stack Overflow用户
提问于 2012-06-12 01:28:10
回答 1查看 1.1K关注 0票数 6

我正在使用iBatis和SQLServer,

使用偏移量和限制进行分页查询的最佳方式是什么?

也许我添加了列ROW_NUMBER() OVER (ORDER BY Id) AS RowNum,但这只会阻止对简单查询的数据访问。在某些情况下,我使用了联合选择。如何对这些查询进行优化?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-12 16:54:39

我对ibatis一无所知,但我想你可以用SQL来做这件事。

如果我理解正确的话,您希望对select语句或几个select语句的联合结果进行分页。

我会用下面的方法来做。例如,这可能是一个存储过程,可能会有一些健全性检查,检查offset和limit的值是否大于0。如果您最终做了这样的事情,请确保也将*替换为您的列名!

下面是一个包含联合的示例:

代码语言:javascript
复制
DECLARE @offset INT;
DECLARE @limit INT;

WITH cte
     AS (SELECT t.*,
                Row_number() OVER (ORDER BY Id) AS RowNum
         FROM   (SELECT *
                 FROM   Table1
                 UNION
                 SELECT *
                 FROM   Table2) t)
SELECT *
FROM   cte
WHERE  RowNum BETWEEN @offset AND @offset + @limit

本质上,我所做的是从两个查询的联合中派生出一个新表,正如您所说的在您的情况下可能发生的情况。然后,我将在CTE中的结果中添加一个带有行号的列,然后只选择在@Offset和@limit + @offset中指定的行,以便只返回您请求的行。

例如,设置@offset = 50和@limit = 50,您将返回50-100的结果(按照Row_number over子句中指定的条件排序)。

(我希望这就是您要找的东西!)

编辑:这将只适用于SQL Server2005以后的版本-您还没有提到您使用的是哪个版本!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10984768

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档