SQL - ограничение результатов - PullRequest
2 голосов
/ 18 ноября 2011

Мне было интересно, если вы могли бы сделать что-то вроде этого, Microsoft SQL Server 2k8 R2

Скажем, у меня есть запрос, который возвращает 100 строк данных.

Это способ, которым я могу передать некоторые переменные, например @lower_limit и @ upper_limit.

Затем я хочу, чтобы запрос записал строки между нижним и верхним пределом

Например:

@lower_limit = 5
@upper_limt  10

Вернет мне строки 5 - 10 из 100 записей.

Ответы [ 3 ]

6 голосов
/ 18 ноября 2011

Вы можете назначить 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()
0 голосов
/ 18 ноября 2011

Примерно так должно работать:

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
0 голосов
/ 18 ноября 2011
select *
from
(
    select *, row_number() over(order by someColToOrderBy) RowNum
    from yourTable
) a
where RowNum between @lower_limit and @uppder_limit
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...