2015-02-10 81 views
1

我试图将记录插入到表中的数据有大量的数据错误,同时插入大量使用Insert语句在SQL Server 2008

文件描述的:

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 

错误:

Exception of type 'System.OutOfMemoryException' was thrown.(mscorlib) 

我想: I verified this answer

下的SQL Server \属性\内存有最小内存每个查询的设置。您可以暂时提高此号码以帮助增加GO语句之间的记录数量。在我的情况下,我提出了这个5000(10000导致系统内存不足的错误,不好),所以我解决了5000,经过几次测试,我发现我现在可以导入大约20,000行,所以我放置一个GO语句每20,000行(大约需要10分钟),并且我能够在一个查询中导入超过200,000行。

+0

得到这个可以帮助你http://dba.stackexchange.com/questions/75326/management-studio-system-outofmemoryexception – 2015-02-10 07:02:22

+0

你是如何插入行?你在SQL Server Management Studio中打开脚本吗?你是通过代码插入行吗? System.OutOfMemoryException是一个CLR异常,所以我猜你正在使用SQL Server Management Studio,在这种情况下,你应该尝试使用sqlcmd命令行工具。 – 2015-02-10 07:04:16

+0

我不知道sqlcmd命令行工具。你可以给我发送有关该工具的链接@Jesus Lopez。 – 2015-02-10 07:11:30

回答

0

SQL Server 2005的最大批处理大小是65,536 *网络数据包大小(NPS),其中NPS通常是4KB。这可以达到256 MB。这意味着你的插入语句平均每个5.8 KB。这看起来不正确,但也许在那里有无关的空间或不寻常的东西。

我的第一个建议是在每个INSERT语句后加上一个“GO”语句。这会将您的单批45000 INSERT语句分为45000个独立的批次。这应该更容易消化。要小心,如果其中一个插入失败,你可能很难找到罪魁祸首。您可能想要通过交易来保护自己。如果您的编辑器具有良好的搜索和替换功能(可以让您搜索并替换返回字符,如\ r \ n)或宏工具,您可以快速添加这些语句。

第二个建议是使用向导直接从Excel导入数据。该向导为您在幕后构建一个小小的SSIS包,然后运行它。它不会有这个问题

参考从此Out of memory exception

+0

检查我的样本数据一次。我已经验证了答案。 – 2015-02-10 07:13:59

+0

@Dineshalla yup没有检查您的更新...为什么你不尝试'SSIS'来插入文件 – 2015-02-10 07:21:10