如果行数太多,ssis excel导入失败

我有一个SSIS包,将Excel 2013(xlsx)文件导入到SQL Server(2016)表中。 我遇到的问题是,如果文件超过一定的大小,包失败。 错误是:

错误:打开“Sheet1 $”行集失败。 检查数据库中是否存在该对象。 [DTS.Pipeline]错误:“组件”validation失败,并返回validation状态“VS_ISBROKEN”。

它看起来好像根本看不到文件/工作表。 一些有趣的笔记:

  • 无论文件大小如何,SQL Server数据工具2015devise器中的包都能正常工作。 只有通过Integration Services目录中的SSMS或SQL代理作业运行它时,它才会失败。

  • 失败的行数不是一个常数。 它似乎更依赖于正在导入的数据总量。 例如,如果每行字符较小,则在大约25k行处失败。 如果每行有更多的字符,则会在16k行左右失败。 在任何一种情况下,到达故障点时的总文件大小仍然小于1MB。

  • 我已经用相同的已知好logging重复X次testing,所以我知道这不是一个不好的logging,造成这个问题。

  • 最初文件位于networking共享上,但是我已经将其移到了服务器的驱动器上,以排除networking不稳定的情况。 不用找了。

  • 我有其他的软件包运行在同一个SQL服务器上,导入100k条logging或更多,总文件大小(几MB)更大。

有什么想法会导致这个?

这与Excel文件大小无关,它与文件系统权限有关。 只需检查以下内容:

  • SQL服务器帐户具有对文件位置的读取权限
  • 如果您正在从variables中读取Excel文件path,或将其作为parameter passing,请检查是否已将“ Data Flow Task的“ Delay Validation属性设置为true。

那么,正在加载的数据量可能需要以较小的块进行处理,而不是一次全部读取。 这样可以减less程序的总体内存需求,尽pipe这需要额外的逻辑来处理从一个数据块到下一个数据块的转换。 通常这应该运行完成就好了。 另外,请参阅下面的链接,了解如何完成ETL的这个小孩的一些想法。

https://www.sqlshack.com/using-ssis-packages-import-ms-excel-data-database/