【问题标题】:LIMIT N vs TOP N in SQL Server [duplicate]SQL Server中的LIMIT N vs TOP N [重复]
【发布时间】:2018-06-22 23:29:03
【问题描述】:

我开始使用 SQL Server。以下作品:

SELECT TOP 100 * 
FROM SalesRawData 
WHERE Title = N'Sriracha'

但以下会导致错误:

SELECT * 
FROM SalesRawData 
WHERE Title = N'Sriracha' 
LIMIT 100

为什么我不能在最后使用“正常”的限制语法?

【问题讨论】:

  • @Shadow 我明白了——所以实际上 sql-server 中没有限制这样的东西。对吗?
  • 因为tsql不支持limit clsuse,所以支持top子句。
  • LIMIT 不是这样做的“正常”方式 - 它是 MySQL(和 Postgres)特定处理获取的方式几行。 Sybase 选择在 T-SQL 中使用SELECT TOP...

标签: sql sql-server


【解决方案1】:

DMBS 供应商拥有专有语法来提供LIMIT 功能。 draft of the ANSI/ISO standards 允许 OFFSETFETCH 子句,这也在 SQL Server 中实现。需要ORDER BY(也需要使用 TOP)才能提供可预测的结果。

以下是另一种选择:

SELECT * FROM SalesRawData
WHERE Title = N'Sriracha' 
ORDER BY Title OFFSET 0 ROWS FETCH FIRST 100 ROWS ONLY;

【讨论】:

    【解决方案2】:

    SQL Server 支持两种方法来限制查询返回的结果数。最简单的是TOP,你已经发现了。更高级的是FETCH,它还允许指定偏移量来实现分页。使用FETCH 方法编写,您的查询将是SELECT * FROM SalesRawData where Title = N'Sriracha' OFFSET 0 ROWS FETCH NEXT 100 ROWS ONLY。您可以找到 TOP here 的文档和 FETCH here 的文档。

    【讨论】:

      猜你喜欢
      • 2016-12-13
      • 2019-06-19
      • 1970-01-01
      • 2012-03-26
      • 1970-01-01
      • 2011-08-09
      • 2017-08-11
      • 1970-01-01
      • 2015-04-24
      相关资源
      最近更新 更多