【问题标题】:Splitting SQL results拆分 SQL 结果
【发布时间】:2012-06-22 18:14:37
【问题描述】:

我有一个 SQL 语句,它返回许多行,这些行被插入到 VBA 中的一个数组中。然后我循环遍历数组并粘贴到电子表格行中。

内存不足,想分批粘贴。

我不介意每次都运行相同的 SQL 查询来收集数据,只要我能避免内存问题。我怎样才能做到这一点?在My SQL中我曾经使用LIMIT,但是这里我想说选择第一个... 1000?然后是下一个 1000 等

【问题讨论】:

    标签: sql sql-server sql-server-2008


    【解决方案1】:

    我发现通过传入 2 个参数来创建一个使用基本分页功能的存储过程调用是最简单的方法:每页的行数和请求的页面。

    看看这个问题:How to do pagination in SQL Server 2008

    如果您以编程方式调用存储过程,则可以使用 while 循环,直到没有返回任何结果。

    【讨论】:

      【解决方案2】:

      要“选择第一个... 1000 个?然后选择下一个 1000 个”,请执行以下操作:

      SELECT * FROM table
      LIMIT <limit>
      OFFSET <batch * limit>
      

      limit 等于 1000,您的批次将从 0 开始,每次调用递增 1

      【讨论】:

      • 这到底是做什么的?我多次调用 SQL 代码?它如何/什么来跟踪位置?感谢您的回答
      • 这将一次获得 1000 行,一旦完成(对于每批),您可以从内存中释放这些行。您可以简单地执行一个 for 循环来存储批次:limit = 1000; for (batch = 0; batch
      • 这是 Mysql 特定的 - OP 在问题中指定 SQL Server。
      • 是的,我是在 SQL Server 之后——我只是和 MySQL 的 LIMIT 能力有关。
      • stackoverflow.com/questions/971964/limit-10-20-in-sqlserver。并确保你有一个 ORDER 子句,这样你就不会两次得到任何相同的东西。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-06
      • 2014-09-08
      • 2020-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多