sql-server - SQL Server 中旧的 row_number() 和新的基于 OFFSET + FETCH 的分页之间有什么区别?

标签 sql-server sql-server-2008 sql-server-2005 sql-server-2012

对于 SQL Server 2012 提供的较旧的 row_number (SQL Server 2008) 和较新的 OFFSET + FETCH (SQL Server 2012) 分页机制,我有几个问题。

  1. row_number() 有哪些限制?
  2. OFFSET + FETCH 是 row_number() 的改进替代品吗?
  3. 是否存在只能使用其中一种而无法满足另一种的用例?
  4. 两者之间有性能差异吗?如果是,推荐哪一种?

谢谢。

最佳答案

使用ROW_NUMBER()效果很好——只是多了一些不必要的工作;您需要围绕实际查询编写一个“骨架”CTE,将 ROW_NUMBER() 列添加到输出集,然后对其进行过滤。

使用新的 OFFSET/FETCH 更简单 - 是的,它的性能也更好,正如这两个链接可以向您展示的那样:

总的来说:如果您使用 SQL Server 2012 - 那么您绝对应该使用OFFSET/FETCH而不是ROW_NUMBER () 用于分页

关于sql-server - SQL Server 中旧的 row_number() 和新的基于 OFFSET + FETCH 的分页之间有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16381803/

相关文章:

database - 两个数据库差异的 VSDBCMD?

sql-server - SQL SERVER sp_executesql ')' 附近的语法不正确

sql - MS SQL 的递归函数

sql-server - 在 sql server 2008R2 数据库中查找所有出现的 sp_send_dbmail

sql-server - 如何使用 BCP 或 Sql Server Management Studio 从 Sql Server 中获取 BLOB 数据?

sql - 如何进行 SQL 查询以从表中获取某些特定范围的行

sql - 来自 XML 的动态查询构造循环条件?

c# - 导入多格式分隔文件

sql-server-2008 - 在两个 SQL Server 数据库之间迁移数据的脚本

sql - 连接多行和多列的不同值