小编典典

将.csv文件导入Microsoft SQL Server 2008 R2的推荐方法?

sql

建议将.csv文件导入Microsoft SQL Server 2008 R2的建议方法是什么?

我想要快速的东西,因为我有一个包含许多.csv文件的目录(> 500MB分布在500个.csv文件中)。

我在Win 7 x64上使用SQL Server 2008 R2。

更新:解决方案

这是我最终解决问题的方法:

  1. 我放弃了使用LINQ to Entities来完成这项工作的尝试。它可以工作-但不支持批量插入,因此速度要慢20倍左右。也许LINQ to Entities的下一版本将支持此功能。
  2. 采取了关于该螺纹的建议,使用了大块镶块。
  3. 我创建了一个使用批量插入的T-SQL存储过程。数据进入登台表,被规范化然后复制到目标表中。
  4. 我使用LINQ to Entities框架将存储过程映射到C#中(www.learnvisualstudio.net上有一个视频,显示如何执行此操作)。
  5. 我编写了所有代码以在C#中循环浏览文件等。
  6. 此方法消除了最大的瓶颈,即从驱动器读取大量数据并将其插入数据库中。

为什么这种方法读取.csv文件的速度非常快?Microsoft SQL
Server可以使用其自身高度优化的例程将文件直接从硬盘驱动器直接导入数据库。其他大多数基于C#的解决方案都需要更多代码,并且某些最终解决方案(如LINQ
to Entities)最终不得不通过C#-to-SQL-server链接将数据缓慢地传递到数据库中。

是的,我知道使用100%纯C#代码来完成这项工作会更好,但是最后:

  • (a)对于此特定问题,与C#相比,使用T-SQL所需 代码少 得多 ,约为1/10,特别是对于从登台表对数据进行非规范化的逻辑而言。这更简单且更易于维护。
  • (b)使用T-SQL意味着您可以利用本机批量插入过程,该过程将等待时间从20分钟加速到30秒暂停。

阅读 346

收藏
2021-03-17

共1个答案

小编典典

在T-SQL脚本中使用BULK INSERT似乎是一个很好的解决方案。

http://blog.sqlauthority.com/2008/02/06/sql-server-import-csv-file-into-sql-
server-using-bulk-insert-load-comma-delimited-file-into-sql-
服务器/

您可以使用xp_cmdshell和dir命令(稍作清除)来获取目录中的文件列表。过去,我尝试使用sp_OAMethod和VBScript函数执行类似的操作,并且不得不使用dir方法,因为我无法使用FSO对象获取文件列表。

http://www.sqlusa.com/bestpractices2008/list-files-in-
directory/

2021-03-17