问题:
我有一个脚本,其中包含来自 select 语句的大约 45,000 个插入。当我尝试运行它时,我收到一条错误消息,指出我的内存已用完。我怎样才能让这个脚本运行?
语境:
如果有不同的方式我应该加载这些数据,请随时责备我并让我知道。
SQL Server 2005 的最大批处理大小为 65,536 * 网络数据包大小 (NPS),其中 NPS 通常为 4KB。可以达到 256 MB。这意味着您的插入语句平均为 5.8 KB。这似乎不对,但其中可能有多余的空间或不寻常的东西。
我的第一个建议是在每个 INSERT 语句之后放置一个“GO”语句。这会将您的单批 45,000 个 INSERT 语句分成 45,000 个单独的批次。这应该更容易消化。小心,如果其中一个插入失败,您可能很难找到罪魁祸首。您可能想通过交易保护自己。如果您的编辑器具有良好的搜索和替换功能(这将允许您搜索和替换 \r\n 等返回字符)或宏工具,您可以快速添加这些语句。
第二个建议是使用向导直接从 Excel 导入数据。该向导在幕后为您构建一个小 SSIS 包,然后运行它。不会有这个问题。