繁体   English   中英

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

[英]Bulk insert records into SQL Server database

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

我可以使用BULK INSERT吗?

最好的方法是使用bcp实用程序SSIS工作流程 这些工具有一些改进,例如在天真的实现中会遗漏缓存和批处理。 下一个最佳选择是BULK INSERT语句,只要SQL Server引擎本身可以访问该文件即可。 最后一个选择是SqlBulkCopy类,该类允许您的应用读取文件,也许对其进行处理和转换,然后将数据作为枚举数提供给SqlBulkCopy。

我最近在处理同样的问题,意识到有几种解决方案。

我写了一个BatchProgram(对于批处理程序设计,请阅读此书-http: //msdn.microsoft.com/zh-cn/magazine/cc164014.aspx

您可以使用SQL Server实用程序BCP.exe或OSQL.exe或.net框架提供的SQLBulkCopy类。

我最终使用了BCP(我得到了CSV文件,并使用了格式化文件并加载了数据)和OSQL(我使用了OSQL,必须将文件提供给存储的proc)

我还去了.NET Process类,并使用outputdatarecieved事件将BCP.exe的所有输出记录到控制台中(请阅读此文章-http: //msdn.microsoft.com/zh-cn/library/system.diagnostics.process.outputdatareceived。 aspx )效果很好。

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

由于我有数百万行,因此我尝试使用CSVReader( http://www.codeproject.com/Articles/9258/A-Fast-CSV-Reader ),该速度非常快。但是在数据转换和转换方面存在太多问题我在SQL Server方面没有太多灵活性。

我最终使用了BCP和OSQL。

是否需要使用C#? 最快的方法是使用bcp命令行工具: http : //msdn.microsoft.com/zh-cn/library/ms162802.aspx

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM