小编典典

SQL Server 中的限制 10..20

all

我正在尝试做类似的事情:

SELECT * FROM table LIMIT 10,20

或者

SELECT * FROM table LIMIT 10 OFFSET 10

但使用 SQL Server

我发现的唯一解决方案看起来有点矫枉过正:

SELECT * FROM ( 
  SELECT *, ROW_NUMBER() OVER (ORDER BY name) as row FROM sys.databases 
 ) a WHERE row > 5 and row <= 10

我还发现

SELECT TOP 10 * FROM stuff;

…但这不是我想做的,因为我无法指定起始限制。

我还有其他方法吗?

另外,只是好奇,是否有 SQL Server 不支持该LIMIT功能或类似功能的原因?我不想刻薄,但这听起来确实是 DBMS
需要的东西……如果确实如此,那么我很抱歉我这么无知!在过去的 5 年里,我一直在使用 MySQL 和 SQL+,所以......


阅读 58

收藏
2022-08-21

共1个答案

小编典典

LIMIT子句不是标准 SQL 的一部分。MySQL、PostgreSQL 和 SQLite 支持它作为 SQL 的供应商扩展。

其他品牌的数据库可能具有类似的功能(例如TOP在 Microsoft SQL Server 中),但它们的工作方式并不总是相同。

TOP在 Microsoft SQL Server 中很难使用来模仿该LIMIT子句。在某些情况下它不起作用。

您展示的解决方案ROW_NUMBER()在 Microsoft SQL Server 2005
及更高版本中可用。这是仅作为查询的一部分工作的最佳解决方案(目前)。

另一种解决方案是使用TOP获取第一个 计数 + 偏移量 行,然后使用 API 查找第一个 偏移量 行。

2022-08-21