将记录批量插入到SQL Server数据库中

问题描述:

我有一个包含大约一百万条记录的文本文件。将它们从C#插入SQL Server数据库的最佳方法是什么?将记录批量插入到SQL Server数据库中

我可以使用BULK INSERT吗?

最好的方法是使用bcp utilitySSIS workflow。这些工具具有诸如高速缓存和批处理等优化功能,可以在天真的实现中遗漏您的遗漏。下一个最佳选择是BULK INSERT声明,只要SQL Server引擎本身可以访问该文件。最后一个选项是SqlBulkCopy类,它允许您的应用程序读取文件,可能处理它并转换它,然后将数据作为枚举器提供给SqlBulkCopy。

+0

谢谢..我会检查 – 2012-01-26 22:21:35

+0

我用SqlBulkCopy的,但问题是我怎么能知道使用SqlBulkCopy的总行插入.WriteToServer()函数 – 2012-01-27 14:46:48

+1

出于好奇,为什么你会把'SqlBulkCopy'放在其他选项后面呢? – jadarnel27 2012-01-30 21:34:17

正在使用C#的要求?最快的方法是使用bcp命令行工具:http://msdn.microsoft.com/en-us/library/ms162802.aspx

+0

感谢克里斯沙恩,我想用C#,因为这将是用C#编写的应用程序的一部分 – 2012-01-26 22:21:22

我最近工作的同类问题,我意识到有几个解决方案。

我写了一个BatchProgram(用于批处理程序设计阅读 - http://msdn.microsoft.com/en-us/magazine/cc164014.aspx

您可以使用SQL Server工具要么BCP.EXE或OSQL.EXE或.NET框架提供SqlBulkCopy类。

我最终使用BCP(我得到的CSV文件,并用于格式化文件并加载数据)和OSQL(我用OSQL其中i有一个文件提供给所述存储过程)

我还去了.NET Process类,并使用outputdatarecieved事件将BCP.exe的所有输出记录到控制台(阅读 - http://msdn.microsoft.com/en-us/library/system.diagnostics.process.outputdatareceived.aspx),这工作得很好。

我也尝试过SQLBulkCopy类,但如果您首先将数据加载到数据表(http://msdn.microsoft.com/en-us/library/ex21zs8x.aspx),它可能会很慢,如果您使用IDataReader(http://msdn.microsoft.com/en-us/library/434atets.aspx)它可能会很快。

因为我有数百万行,我尝试使用CSVReader(http://www.codeproject.com/Articles/9258/A-Fast-CSV-Reader),这是非常快的。但下来的行数太多的问题在数据转换,我没有太多的灵活性在SQL服务器端。

我结束了使用BCP和OSQL。