更好的SQL分页技术

0 sql sql-server sql-server-2012

有没有更好的方法在SQL服务器中进行分页?

例如,我必须使用以下技术将@skip添加到@take:

;WITH tmp_cte AS (
 SELECT ROW_NUMBER() OVER (ORDER BY LastName) AS RowNumber,
        LastName, 
        FirstName
   FROM person.Person
  WHERE FirstName like '%ad%'
)
SELECT * 
FROM tmp_cte 
WHERE RowNumber > @skip --10 
AND RowNumber <= @Take--20
Run Code Online (Sandbox Code Playgroud)

是否有更好的方法,以便我不必添加跳过?

Har*_*der 6

在SQL 2012中,它非常简单:

SELECT LastName, FirstName
  FROM person.Person
 WHERE FirstName like '%ad%'
 ORDER BY LastName
 OFFSET 10 ROWS 
 FETCH NEXT 10 ROWS ONLY;
Run Code Online (Sandbox Code Playgroud)

查看 此链接 以获取其他版本的SQL Server +性能比较.