asp.net网格分页的SQL查询

时间:2012-06-11 17:28:10

标签: c# asp.net sql-server ibatis

我正在使用iBatisSQLServer

使用偏移和限制进行查询查询的最佳方法是什么?

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

1 个答案:

答案 0 :(得分:1)

我对ibatis一无所知,但我想你可以在SQL中做到这一点。

如果我理解正确,您希望获得paginate select语句的结果或几个select语句的并集。

我会按照以下方式进行。例如,这可能是一个存储过程,并且应该在那里进行一些健全性检查,检查偏移量和限制的值是否大于0.如果你最终做了这样的事情,请确保替换{{1}你的列名也是!

这是一个带联合的例子:

*

基本上我所做的是从两个查询的并集中派生出一个新表,正如你所说的那样可能发生在你的情况下。然后我在CTE中添加一个包含行号的列到结果中,然后只选择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 @Offset中指定的行以仅返回您的行我要求。

E.g。设置@limit + @offset@offset = 50,您将获得50-100的结果(按照@limit = 50 over子句中指定的条件排序。

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

编辑:这只能在SQL Server 2005之后使用 - 您还没有提到您正在使用的版本!