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

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

如果我正确理解你的问题,你会得到一个大的电子表格,需要把它上传到SQL Server数据库。 我不确定为什么你的过程目前很慢,但我不认为数据量本来就应该很慢。

根据你有哪些开发工具可用,应该可以在合理的时间内将其导入。

  • SSIS可以从excel文件中读取。 你可以安排一个定期醒来的工作,并检查一个新文件。 如果find该文件,则使用数据stream任务将其导入到临时表中,然后使用SQL任务在其中运行一些处理。

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

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

从用户提供的电子表格无头文件import总是很麻烦,所以在通过桌面应用程序进行文件传输时有相当多的优点。 主要好处是有错误报告。 一个无头的工作真的只能发送一个电子邮件与一些状态信息。 如果您有交互式应用程序,则用户可以对文件进行疑难解答,并进行多次尝试,直至find正确的文件。

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

无论如何,我最成功地使用SSIS导入大数据集。 我也build立了一个电子表格作为一个链接服务器的工作,但总是觉得有点对我来说。

看看这篇文章详细介绍了如何使用几种不同的方法导入数据,即:

  • 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提供程序