【问题标题】:How to use limit in Microsoft SQL Server 2008?如何在 Microsoft SQL Server 2008 中使用限制?
【发布时间】:2014-07-30 15:13:17
【问题描述】:

我们必须在 SQL server 2008/2012 中使用 Limit 关键字。

我们需要为每次开始索引都会更改的每个查询应用限制。当我在谷歌上搜索时发现 TOP 但它对我们不起作用。任何人都可以分享如何在每次启动索引更改的 sql server 中使用 LIMIT 关键字。

我们需要像下面这样在 SQL 服务器中查询 -

SELECT * from STOCK LIMIT 11, 10000 (where 11=start index, 10000=size)

【问题讨论】:

  • SQL Server 中没有LIMIT。所以你不能使用它。 “TOP 对我们不起作用”到底是什么意思?
  • 如果2012可以使用offset-fetch
  • LIMIT 是 MySQL/Postgres 特定的扩展,并非在所有 SQL 数据库中都普遍可用(它也不是 SQL 语言标准的一部分)。
  • 借助 offset 和 fetch 我们可以解决 SQL server 2012 中的 LIMIT 问题。示例 - SELECT ITEM_ID, PRICE FROM MENU ORDER BY ITEM_ID ASC OFFSET 10 ROWS FETCH NEXT 10 ROWS ONLY;跨度>

标签: sql-server-2008


【解决方案1】:

这对你来说可能不是一个好的长期解决方案,但如果表有一个 Identity 字段,你可以这样做:

SELECT TOP 1000 * FROM STOCK
WHERE Id > 11
ORDER BY Id

【讨论】:

  • 我们已迁移到 SQL Server 2012 并将 LIMIT 替换为 OFFSET 和 FETCH。谢谢
【解决方案2】:

您可以使用带有窗口函数的 CTE,就像在这个 SO 问题的答案中一样 -> Skip first row in SQL Server 2005?

【讨论】:

  • 我们已迁移到 SQL Server 2012 并将 LIMIT 替换为 OFFSET 和 FETCH。谢谢
【解决方案3】:

您必须使用 ROW_NUMBER() 之类的函数,然后从那里指定您想要的内容。

select top 10000 *, row_number() over (order by [YourFieldName]) as row from Stock where row > 11

【讨论】:

  • 借助 offset 和 fetch 我们可以解决 SQL server 2012 中的 LIMIT 问题。示例 - SELECT ITEM_ID, PRICE FROM MENU ORDER BY ITEM_ID ASC OFFSET 10 ROWS FETCH NEXT 10 ROWS ONLY;跨度>
【解决方案4】:

我们已升级到 SQL Server 2012,并将查询替换为 OFFSET 和 FETCH。示例如下。

SELECT ITEM_ID, PRICE FROM MENU ORDER BY ITEM_ID ASC OFFSET 10 ROWS FETCH NEXT 10 ROWS ONLY; 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-13
    相关资源
    最近更新 更多