我即将启程编写Windows窗体应用程序将打开一个txt文件,它是管道分隔和大小约为230 MB。 那么这个程序将插入这个数据到SQL Server 2005数据库(显然这需要迅速发生)。 我使用C#3.0和为这个项目.NET 3.5。
这里我不要求应用,只是一些公共意见和潜在的缺陷提出建议。 从我收集的是SQL批量复制是一个先决条件的网站,有什么我应该考虑一下(我认为这只是一个形式的应用中打开txt文件将是一个很大的努力;也许它分解成二进制大对象数据)。
谢谢你,我会编辑的问题,为了清楚起见,如果有人需要它。
Answer 1:
你必须写一个WinForms应用程序? 这可能是更容易和更快地使用SSIS。 有一些内置的任务,特别是提供大容量插入任务 。
此外,值得一检查平面文件批量导入方法加快在SQL Server 2005中的比较。
更新:如果你是新来的SSIS,看看这些网站让你的快车道。 1) SSIS控制流基础知识 2) 入门与SQL Server集成服务
这又是一个如何:在导入Excel文件到SQL 2005 。
Answer 2:
这将是一个流媒体的努力。
如果可以的话,这里不使用事务。 的交易费用将仅仅是太大。
所以,你要做什么读取文件中的行的时间和在一个时间线插入。 你应该清除失败的插入到以后可以诊断,看看他们失败的另一个文件。
起初,我会继续前进,尝试几百行的批量插入正好看到流是否正常工作,然后你可以打开所有你想要的。
Answer 3:
你可以尝试使用SqlBulkCopy的 。 它可以让你从“任何数据源”拉。
Answer 4:
正如一个侧面说明,它有时快放弃你的表的索引和大容量插入操作后重新创建。
Answer 5:
您可能会考虑从完全恢复到大容量日志切换。 这将有助于保持你的备份一个合理的规模。
Answer 6:
我完全推荐SSIS,您可以读取数以百万计的记录,并清除它们沿相对较少时间的方式。
您将需要留出一些时间去与SSIS交手,但它应该还清。 这里有上这么几个其他线程这将可能是有用的:
什么是批量最快的方式插入很多在SQL Server中的数据(C#客户端)
什么是SSIS推荐的学习资料?
您也可以从C#程序包。 我有一个C#程序读取从遗留系统3GL“主文件”(使用API我有一个相关的项目解析成一个对象模型),取包裹模板,并修改它来生成包的ETL。
Answer 7:
数据你实际上是在谈论大小不是巨大的。 我不知道您的工作效率的担忧是什么,但如果你能等待几个小时才能插入,你可能会在多么容易,这将是与刚刚在一次插入每行一个真的很幼稚的技术来完成惊讶。 在同一时间一起配料千元左右的行并将它们提交到SQL服务器可能使相当快一点为好。
只是一个建议,可以为您节省一些严重的编程时间,如果你不需要它一样快可想而知。 根据该进口多久具有运行,节约了编程时间几天可以很容易地是值得的,以换取在它运行时等待了几个小时。
Answer 8:
您可以使用SSIS的读取和插入,但把它作为您的WinForms应用程序包。 然后,你可以传递之类的东西源,目的地,连接字符串等作为参数/配置。
方法文档: http://msdn.microsoft.com/en-us/library/aa337077.aspx
您可以设置转换和错误内SSIS处理,甚至创建一个基于输入参数的逻辑分支。
Answer 9:
如果该文件的列格式,其中该数据需要最终目标表匹配,我更喜欢使用命令行实用程序BCP加载数据文件。 这是极快的,你可以为任何“奇”中记载,无法插入指定和错误文件。
如果你需要存储的命令行参数,它(服务器,数据库,用户名/密码或受信任的连接,表,错误文件等),您的应用可以揭开序幕的命令。
我喜欢这种方法不是因为是由数据库服务器访问系统上的数据文件,不需要运行BULK INSERT SQL命令更好。 若要使用BULK INSERT,您必须指定的数据文件来加载路径,所以它必须是一个路径由运行负荷在数据库服务器上的系统用户可见性和可读性。 对我来说太麻烦一般。 :-)
文章来源: What are the pitfalls of inserting millions of records into SQL Server from flat file?