将大型Excel文件导入SQL Server的最佳方法

4
我们正在尝试设计一种最佳方法来将非常大的Excel文件导入SQL数据库。使用SSIS有些麻烦,因为它会扫描前X条记录以确定文件的格式,但下面的行可能不同,所以需要很多试错,我们必须将不寻常的列移到顶部,以便SSIS可以“学习”。
当我们得到要导入的新文件格式时,它们符合行格式等规范 - 因此我们可以预先知道模式。 SQL目标表具有相同的模式,还有一些额外的列,例如插入日期和原始文件名。
是否有更简单的方法来创建我们将要插入的新文件的格式定义?我们不必使用SSIS,我们对任何其他工具都持开放态度,以尽可能自动化。还有一个问题是测试我们将要导入的数据的完整性,我们计划针对临时数据集进行基本查询,例如“少于1%的记录可能缺少邮政编码”等。
非常感谢。

1
文件必须是Excel格式吗?如果可以导出为CSV格式,您可以使用BCP将整行数据导入到一个暂存表中的单个记录中,然后在此基础上运行存储过程以检查错误和上述提到的“学习”部分。然后,您可以很容易地考虑自动化该过程。 - Nick Pfitzner
有一个服务器级别的设置,告诉SSIS扫描多少行来确定文件的格式。我忘记了这个设置的名称,但我相信它可以很容易地通过谷歌搜索找到。 - Tab Alleman
@TabAlleman 是正确的,您可以使用 TypeGuessRows=0 (https://jingyangli.wordpress.com/2009/02/13/imex1-revisit-and-typeguessrows-setting-change-to-0-watch-for-performance/),但是对于大文件可能会有性能问题,因为它将扫描整个文件。我建议尝试将文件转换为分隔符格式。大多数系统都支持导出到除了 Excel 之外的其他格式。 - Mark Wojciechowicz
BCP和SSIS的建议都指引了我们正确的方向 - 非常感谢大家。 - Gary Dev
你还可以使用脚本任务,将文件中的所有内容作为文本读取,而不是使用 Excel 源。稍后再在后续任务中进行适当的格式化。此外,IMEX = 1 可以用于读取混合格式的数据。 - whereisSQL
1个回答

0

也许您可以将数据作为文本导入,然后使用“派生列”转换进行转换。您可以使用连接字符串中的IMEX选项将数据从Excel读取为文本。有关此参数的更多信息,请单击此处


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接