我使用iBatis
和SQLServer
,
什么是使用偏移pagging查询的最佳方式和限制?
也许我添加列ROW_NUMBER() OVER (ORDER BY Id) AS RowNum
,但这只会防止简单查询的数据访问。 有一些情况下,我使用的选择工会。 如何租期,提高这些查询?
我使用iBatis
和SQLServer
,
什么是使用偏移pagging查询的最佳方式和限制?
也许我添加列ROW_NUMBER() OVER (ORDER BY Id) AS RowNum
,但这只会防止简单查询的数据访问。 有一些情况下,我使用的选择工会。 如何租期,提高这些查询?
我不知道ibatis的东西,但我想你可以在SQL做到这一点。
如果我理解正确的话,你想获得分页几个select语句的select语句或联合的结果。
我会做下列方式。 这可能是例如一个存储过程,并有可能应该理智一些在那里检查检查的价值观偏移和限制都大于0。如果你这样做最终会做这样的事情,一定要更换*
您列名字呢!
下面是一个联合的示例:
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
以上条款。
(我希望这是那种你要找的东西!)
编辑:这只会在SQL Server 2005中开始工作-你没有提到你正在使用的版本!