寻找将大型excel(xlsx)文件加载到SQL中的有效方法

寻找将大型excel(xlsx)文件加载到SQL中的有效方法,sql,sql-server,excel,csv,ssis,Sql,Sql Server,Excel,Csv,Ssis,我正在寻找替代的数据导入解决方案。目前我的流程如下: 在excel中打开一个大xlsx文件 用空格或其他唯一字符替换所有“|”(管道) 将文件另存为以管道分隔的CSV 使用SQL Server Management Studio 2008 R2中的导入向导导入CSV文件 过程有效;但是,步骤1-3需要很长时间,因为加载的文件非常大(约100万条记录) 根据一些研究,我发现了一些潜在的解决方案: a) 批量导入-遗憾的是,这并没有消除上面提到的步骤1-3,因为文件需要转换为平面(或CSV)格式 b

我正在寻找替代的数据导入解决方案。目前我的流程如下:

  • 在excel中打开一个大xlsx文件
  • 用空格或其他唯一字符替换所有“|”(管道)
  • 将文件另存为以管道分隔的CSV
  • 使用SQL Server Management Studio 2008 R2中的导入向导导入CSV文件
  • 过程有效;但是,步骤1-3需要很长时间,因为加载的文件非常大(约100万条记录)

    根据一些研究,我发现了一些潜在的解决方案: a) 批量导入-遗憾的是,这并没有消除上面提到的步骤1-3,因为文件需要转换为平面(或CSV)格式 b) OpenRowSet/OpenDataSource-此问题有两个问题。首先,加载需要很长时间(一百万条记录大约需要2小时)。其次,当我试图一次加载多个文件(每个文件大约20个,包含100万条记录)时,我收到一个“内存不足”错误

    我没有试过SSIS;我听说它有大xlsx文件的问题

    这就引出了我的问题。是否有任何解决方案/替代选项可以加快大型excel文件的导入


    非常感谢您的帮助。

    我以前做过一件事(我之所以提起,是因为我看到您的文件类型是XLSX,而不是XLS),就是通过winzip打开文件,拉出XML数据,然后导入它。从2007年开始,XLSX文件实际上是一个包含许多文件夹/文件的zip文件。如果excel文件很简单(没有太多宏、图表、格式化等),您可以从后台的XML文件中提取数据。我知道你可以通过WINZIP看到它,我不知道其他压缩应用程序。

    我喜欢Excel作为数据可视化工具,但它作为数据传输层非常有用。我的首选是使用或使用C#for查询它

    我还没有将其增加到数百万,但我必须相信第一种方法必须比当前的方法更快,因为您不必对数据执行双重读取和写入


    我得问一个愚蠢的问题。这些数据实际上是来自excel文件,还是在excel文件变成excel文件之前,您可以从excel文件中获得一些生成的输出。我认为您在非Excel格式方面会有更大的灵活性。这在
    OPENROWSET
    上的性能非常糟糕,我经常使用它,而且没有遇到像您的格式那样慢的性能(也运行倍数)。为什么要执行步骤1-3,而不仅仅是使用SSMS中的导入向导来导入excel文件?这里还有一个愚蠢的问题-如果要删除所有管道,为什么要将其保存为管道分隔文件?@rikalus从字段中删除管道,保存时将其添加到字段之间以用作分隔符。而不是使用文本限定符。(我想)我同意Gary的观点-可能有人不得不花数小时不必要地创建Excel文件。我相信你已经走上了这条路,但是你有什么办法可以让它进入CSV呢?你有没有博客文章或者这个方法的例子?我一直很想看到处理问题的新方法,教授,没有博客。如果在Winzip中打开它并四处搜索,您将看到XML文件。文件/文件夹的名称取决于您的工作表名称,它们也有一些内部文件名。顺便说一句,您可以尝试将excel文件保存为XML或固定宽度,这样您就不必从文件中删除派克文件。总之少了一步。我可能只是使用.net库在内存中解压它,但希望听到有关xml解析的详细信息。这里有一个链接,指向有关保存固定宽度的一些信息: