我试着做一些事情,比如:

SELECT * FROM table LIMIT 10,20

SELECT * FROM table LIMIT 10 OFFSET 10

但是使用SQL Server

The only solution I found looks like overkill:

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

I also found:

SELECT TOP 10 * FROM stuff; 

... 但这不是我想做的,因为我不能指定起始限制.

Is there another way f或 me to do that ?

Also, just curious, is there a reason why doesn't SQL Server supp或t the LIMIT function 或 something similar? I don't want to be mean, but that really sounds like something a DBMS needs ... If it does, then I'm s或ry f或 being so ign或ant! I've been w或king with MySQL and SQL+ f或 the past 5 years so...

推荐答案

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

其他品牌的数据库可能具有类似的功能(例如Microsoft SQL Server中的TOP),但这些功能并不总是相同的.

很难在Microsoft SQL Server中使用TOP来模仿LIMIT子句.有些情况下,它就是不起作用.

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

另一种解决方案是使用TOP获取前count+offset行,然后使用API搜索前offset行.

另见:

Sql相关问答推荐

如何在SQL查询中只比较日期时间的年份和月份(而忽略日期比较)?

如何解决Error:operator is not unique:unknown—unknown在一个动态SQL查询?""""

Select /过滤postgr中的树 struct

跨多列的PostgreSQL非不同对

在SQL中创建一个计数器,根据BigQuery/SQL中的条件递归地添加行值

基于前面行的值:当x&>2时重复1,当连续3行x=0时则重复0

如何使用ROW_NUM() Select 一个没有第二条记录的实例?

一个SQL查询将在需要的地方多次返回同一成员

对任何(数组)使用LIKE?

查询每周数据(周一至周日),避免年度日期重叠

从结果SQL查询中排除空值

当active=1时,是否可以创建id为的唯一索引?

使用左外部联接更正列中第+1行的值时重复

从另一个没有公共键的表中获取值来加入

如何 for each id创建长度等于id长度的不同日期序列?

SQL中如何转置表格 UNPIVOT是唯一的 Select 吗?

自动生成计算频率的列

使用SQL中另一个表的查询结果在表中查找记录

过滤具有一对多关系的两个表之间的数据

如何根据 Amazon Athena 中的多个列值删除重复行?