我想知道你是否可以這樣做是微軟SQL Server 2k8 R2SQL - 限制結果
說我有一個查詢返回100行數據。
他們是我可以傳遞一些變量的方式,例如@lower_limit和@upper_limit。
然後我想查詢記錄的下限和上限
之間的行中例如:
@lower_limit = 5
@upper_limt 10
會回到我行5 - 10從100條記錄。
我想知道你是否可以這樣做是微軟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://stackoverflow.com/questions/971964/limit-10-20-in-sqlserver) – mellamokb