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