SQL - 限制结果
我想知道你是否可以这样做是微软SQL Server 2k8 R2SQL - 限制结果
说我有一个查询返回100行数据。
他们是我可以传递一些变量的方式,例如@lower_limit和@upper_limit。
然后我想查询记录的下限和上限
之间的行中例如:
@lower_limit = 5
@upper_limt 10
会回到我行5 - 10从100条记录。
您可以在结果集上指定ROW_NUMBER(),然后使用BETWEEN
语句来限制行。
一个人为的例子:
WITH data AS
(
SELECT
ID
,YourColumn
,ROW_NUMBER() OVER (ORDER BY ID) AS RowNum
FROM
YourTable
)
SELECT
*
FROM
data
WHERE
RowNum BETWEEN 5 AND 10
编辑:对于标准分页,这里正是我在所有的应用中使用的技术我开发:
DECLARE @PageNumber int = /* The page number you want */
DECLARE @PageSize int = /* The number of records per page */
WITH paged AS
(
SELECT
ROW_NUMBER() OVER(ORDER BY [OrderByColumns]) AS RowNum
,*
FROM
[YourSource]
)
SELECT
[Column1]
,[Column2]
,...
FROM
paged
WHERE
RowNum BETWEEN (@PageNumber - 1) * @PageSize + 1 AND @PageNumber * @PageSize
ORDER BY
[OrderByColumns] -- Same as used in ROW_NUMBER()
+1绝对!我刚才创建了[一篇文章](http://codecrafter.blogspot.com/2008/08/painful-sql-server-pagination.html)。 –
这是不真实的Cory,非常感谢,比我之前在这里执行这个网站的分页的方式要好得多。 他每次都调用SP,然后限制代码中显示的内容。 – swade1987
@ user1052764:我编辑了我的答案,向您展示了我使用的分页技术。 –
select *
from
(
select *, row_number() over(order by someColToOrderBy) RowNum
from yourTable
) a
where RowNum between @lower_limit and @uppder_limit
像这样的东西应该工作:
SELECT ID, Foo, Bar
FROM (
SELECT ROW_NUMBER() OVER (ORDER BY ID ASC) AS Row, ID, Foo, Bar
FROM SomeTable
)
tmp
WHERE Row >= @RowRangeStart AND Row <= @RowRangeEnd
可能的重复[限制10..20在sqlserver](http://*.com/questions/971964/limit-10-20-in-sqlserver) – mellamokb