我试图将记录插入表中有大量数据
文件说明:
Size : 65.0 MB
Records count : 10000
我的样本数据:
INSERT INTO tbldata(col1,col2,col3)values(col1,col2,col3)
GO
INSERT INTO tbldata(col1,col2,col3)values(col1,col2,col3)
GO
INSERT INTO tbldata(col1,col2,col3)values(col1,col2,col3)
GO
INSERT INTO tbldata(col1,col2,col3)values(col1,col2,col3)
GO
.......
INSERT INTO tbldata(col1,col2,col3)values(col1,col2,col3)
GO
INSERT INTO tbldata(col1,col2,col3)values(col1,col2,col3)
GO
.......
UPTO 10000 ROWS
ERROR:
Exception of type 'System.OutOfMemoryException' was thrown.(mscorlib)
在SQL Server \ Properties \ Memory下,有一个每个查询的最小内存设置。您可以暂时提高此数字,以帮助增加GO语句之间的记录数。在我的情况下,我把它提高到5000(10000导致系统内存错误,不好)所以我安顿了5000,经过几次测试后我发现我现在可以导入大约20,000行所以我每隔20,000行放置一个GO语句(花了大约10分钟),我能够在一个查询中导入超过200,000行。
答案 0 :(得分:0)
SQL Server 2005的最大批处理大小为65,536 *网络包大小(NPS),其中NPS通常为4KB。这可以达到256 MB。这意味着你的insert语句平均每个5.8 KB。这似乎不对,但也许那里有无关的空间或不寻常的东西。
我的第一个建议是在每个INSERT语句后放置一个“GO”语句。这会将您的一批45,000个INSERT语句分成45,000个单独的批次。这应该更容易消化。小心,如果其中一个插入失败,你可能很难找到罪魁祸首。您可能希望通过交易来保护自己。如果您的编辑器具有良好的搜索和替换(可以让您搜索和替换返回字符,如\ r \ n)或宏工具,则可以快速添加这些语句。
第二个建议是使用向导直接从Excel导入数据。该向导在幕后为您构建一个小的SSIS包,然后运行它。它不会有这个问题