如何有效地插入一张大桌子

时间:2017-11-06 16:49:30

标签: sql-server ssis sql-insert etl bcp

我保存了一张大表generate script(如this)。因此,生成的sql文件有〜十亿行INSERT INTO代码。假设该表大约为30 Gb,而我的计算机有64 Gb RAM - 在这种情况下,我认为我们不应该将所有30Gb数据加载到内存中。

所以我的问题是,当我执行这个sql文件(许多INSERT INTO)时,sql是否尝试将所有内容加载到RAM中?或者是否按批次自动执行?

如果sql没有自动将其拆分为批处理,我该如何制作?谢谢 -

大图: 我需要将一个大表保存到硬盘驱动器,转到另一台计算机并将表导入到那里的SQL服务器

1 个答案:

答案 0 :(得分:1)

我建议bcp进行这样的操作。

这将涉及两个步骤:

  1. 使用bcp导出数据,方法是发出如下命令:--sourcemaps true。其中bcp dbo.someTable out "C:\someTable.txt" -c -T是包含您数据的表格。
  2. 通过发出如下命令导入数据:dbo.someTable。其中bcp dbo.someNewTable in "C:\someTable.txt" -c -T是用于存储导出数据的新表。
  3. 如果您热衷于明确管理batch size。您将使用dbo.someNewTable参数。来自MS docs:

      

    默认情况下,数据文件中的所有行都作为一个批次导入。要在多个批次之间分配行,请指定小于数据文件中行数的batch_size。