LIMIT 10..20 in SQL Server

后端 未结 15 2585
礼貌的吻别
礼貌的吻别 2020-11-22 11:21

I\'m trying to do something like :

SELECT * FROM table LIMIT 10,20

or

SELECT * FROM table LIMIT 10 OFFSET 10
15条回答
  •  夕颜
    夕颜 (楼主)
    2020-11-22 12:03

    If you are using SQL Server 2012+ vote for Martin Smith's answer and use the OFFSET and FETCH NEXT extensions to ORDER BY,

    If you are unfortunate enough to be stuck with an earlier version, you could do something like this,

    WITH Rows AS
    (
        SELECT
                  ROW_NUMBER() OVER (ORDER BY [dbo].[SomeColumn]) [Row]
                , *
            FROM
                  [dbo].[SomeTable]
    )
    SELECT TOP 10
              *
         FROM
             Rows
        WHERE Row > 10
    

    I believe is functionaly equivalent to

    SELECT * FROM SomeTable LIMIT 10 OFFSET 10 ORDER BY SomeColumn
    

    and the best performing way I know of doing it in TSQL, before MS SQL 2012.


    If there are very many rows you may get better performance using a temp table instead of a CTE.

提交回复
热议问题