我正在尝试做类似的事情:
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+,所以......
LIMIT
该LIMIT子句不是标准 SQL 的一部分。MySQL、PostgreSQL 和 SQLite 支持它作为 SQL 的供应商扩展。
其他品牌的数据库可能具有类似的功能(例如TOP在 Microsoft SQL Server 中),但它们的工作方式并不总是相同。
TOP
TOP在 Microsoft SQL Server 中很难使用来模仿该LIMIT子句。在某些情况下它不起作用。
您展示的解决方案ROW_NUMBER()在 Microsoft SQL Server 2005 及更高版本中可用。这是仅作为查询的一部分工作的最佳解决方案(目前)。
ROW_NUMBER()
另一种解决方案是使用TOP获取第一个 计数 + 偏移量 行,然后使用 API 查找第一个 偏移量 行。