我保存了一张大表generate script
(如this)。因此,生成的sql文件有〜十亿行INSERT INTO
代码。假设该表大约为30 Gb,而我的计算机有64 Gb RAM - 在这种情况下,我认为我们不应该将所有30Gb数据加载到内存中。
所以我的问题是,当我执行这个sql文件(许多INSERT INTO
)时,sql是否尝试将所有内容加载到RAM中?或者是否按批次自动执行?
如果sql没有自动将其拆分为批处理,我该如何制作?谢谢 -
大图: 我需要将一个大表保存到硬盘驱动器,转到另一台计算机并将表导入到那里的SQL服务器
答案 0 :(得分:1)
我建议bcp进行这样的操作。
这将涉及两个步骤:
--sourcemaps true
。其中bcp dbo.someTable out "C:\someTable.txt" -c -T
是包含您数据的表格。dbo.someTable
。其中bcp dbo.someNewTable in "C:\someTable.txt" -c -T
是用于存储导出数据的新表。如果您热衷于明确管理batch size。您将使用dbo.someNewTable
参数。来自MS docs:
默认情况下,数据文件中的所有行都作为一个批次导入。要在多个批次之间分配行,请指定小于数据文件中行数的batch_size。