SQL - 限制结果

swa*_*987 2 sql limit sql-server-2008-r2

我想知道你是否可以做这样的事情是Microsoft SQL Server 2k8 R2

假设我有一个返回100行数据的查询.

他们是一种可以传递一些变量的方法,例如@lower_limit和@upper_limit.

然后我希望查询记录下限和上限之间的行

例如:

@lower_limit = 5
@upper_limt  10
Run Code Online (Sandbox Code Playgroud)

会从100条记录中返回5-10行.

Cᴏʀ*_*ᴏʀʏ 6

您可以在结果集上分配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
Run Code Online (Sandbox Code Playgroud)

编辑:对于标准分页,这正是我在我开发的所有应用程序中使用的技术:

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()
Run Code Online (Sandbox Code Playgroud)