大型Excel文件导入SQL Server数据库

时间:2012-01-10 22:42:33

标签: sql-server excel ssis

我的客户端需要将LARGE Excel文件(72K行)中的行导入其SQL Server数据库。该文件由系统用户上传。当我们尝试在用户上传的同时上传和处理这些问题时,性能就成了问题。现在我们将它保存到磁盘上,管理员将其拾取并将其拆分为2K行并逐个通过上传工具运行。有没有更简单的方法来实现这一点而不影响性能或超时?

2 个答案:

答案 0 :(得分:2)

如果我正确理解您的问题,您会收到一个大型电子表格,需要将其上传到SQL Server数据库。我不确定为什么你的进程目前很慢,但我不认为数据量本身应该很慢。

根据您可用的开发工具,应该可以在合理的时间内导入它。

  • SSIS可以从excel文件中读取。您可以安排定期唤醒的作业并检查新文件。如果找到该文件,则它使用数据流任务将其导入到临时表中,然后它可以使用SQL任务在其中运行某些处理。

  • 如果您可以使用.Net,那么您可以编写一个通过OLE自动化API读取数据并通过SQLBulkCopy将其加载到暂存区域的应用程序。您可以通过Excel COM API将整个范围读入变量数组。这不是超快,但应该足够快,以达到您的目的。

  • 如果您不介意使用VBA,那么您可以编写一个类似的宏。但是,我不认为传统的ADO具有批量加载功能。为此,您需要导出.CSV或类似于可从服务器上看到的驱动器,然后从该文件中BULK INSERT。您还必须为输出.CSV文件创建一个bcp控制文件。

从用户提供的电子表格中进行无头导入总是很麻烦,因此通过桌面应用程序进行此操作非常有用。主要好处是错误报告。无头工作实际上只能发送包含一些状态信息的电子邮件。如果您有一个交互式应用程序,则用户可以对文件进行故障排除并进行多次尝试,直到他们做对了。

答案 1 :(得分:1)

我可能是错的,但是根据你的描述,听起来你正在处理应用程序中的代码处理(即上传文件并处理上传的代码然后处理导入,可能是逐行处理的基础上)

无论如何,我使用SSIS导入大型数据集的成功率最高。我还设置了一个电子表格作为链接服务器,它可以工作,但总觉得我有点hackey。

查看this article,其中详细介绍了如何使用多种不同方法导入数据,即:

  • SQL Server数据转换服务(DTS)
  • Microsoft SQL Server 2005集成服务(SSIS)
  • SQL Server链接服务器
  • SQL Server分布式查询
  • ActiveX数据对象(ADO)和用于SQL Server的Microsoft OLE DB提供程序
  • ADO和Jet 4.0的Microsoft OLE DB提供程序