【问题标题】:Error While Inserting large amount of data using Insert statement in SQL Server 2008在 SQL Server 2008 中使用 Insert 语句插入大量数据时出错
【发布时间】:2015-02-10 06:42:00
【问题描述】:

我正在尝试将记录插入到有大量数据的表中

文件说明:

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\Properties\Memory 下有一个“每个查询的最小内存”设置。您可以暂时提高此数字以帮助增加 GO 语句之间的记录数。在我的情况下,我将它提高到 5000(10000 导致系统内存不足错误,不好)所以我选择了 5000,经过几次测试后我发现我现在可以导入大约 20,000 行,所以我每 20,000 行放置一个 GO 语句(大约花了 10 分钟),我能够在一个查询中导入超过 200,000 行。

【问题讨论】:

  • 如何插入行?您是否在 SQL Server Management Studio 中打开脚本?您是否通过代码插入行? System.OutOfMemoryException 是一个 CLR 异常,所以我猜你正在使用 SQL Server Management Studio,在这种情况下你应该尝试使用 sqlcmd 命令行工具。
  • 我不知道 sqlcmd 命令行工具。你能把那个工具的链接发给我吗@Jesus Lopez。
  • @Dinesh alla,Google 是你的朋友

标签: sql sql-server sql-server-2008 insert bulkinsert


【解决方案1】:

SQL Server 2005 的最大批处理大小为 65,536 * 网络数据包大小 (NPS),其中 NPS 通常为 4KB。可以达到 256 MB。这意味着您的插入语句平均为 5.8 KB。这似乎不对,但其中可能有多余的空间或不寻常的东西。

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

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

参考来自这个Out of memory exception

【讨论】:

  • @Dineshalla 是的,没有检查您的更新...为什么您不尝试 SSIS 插入文件
猜你喜欢
  • 2016-05-19
  • 1970-01-01
  • 1970-01-01
  • 2014-02-28
  • 1970-01-01
  • 1970-01-01
  • 2023-03-16
  • 2015-02-06
  • 2013-03-12
相关资源
最近更新 更多