首页 > 解决方案 > 将多个文件夹中的多个 PDF 导入 SQL 表。

问题描述

我需要将多个文件夹(共享目录)中的多个 PDF 文件上传到 SQL 表中。完成此任务并使其自动化的最佳方法是什么?DB 表结构如下所示> DB 表格式

文件列表是完整路径。类型是文件夹,文件来自哪里,文件名是文件名和分机。共享文件夹中的文件是扫描的 PDF 文件。17 个文件夹深。 PDF 在一个文件夹 中的共享树如下所示: 文件夹树 这使用存储过程来完成,其中数据库表将被删除(因为另一个任务扫描表并将 pdf 散列到 CMR 中)并且共享文件夹被扫描并导入到表中。这失败了,失败点是 xp_cmdshell 并且我已经沿着添加代理的路线走下去,但它仍然使命令失败。必须有更好的方法从这些文件夹上传多个 PDF,然后在移动文件夹后从文件夹中删除文件。有什么建议么?或指出我正确的方向?

标签: sqlmysqlississsis-2012

解决方案


您首先要创建两个字符串变量。第一个将包含您的共享文件夹树的基本文件夹的路径。我打电话给我的PathToBaseFolder。第二个将用于存储当前文件的完整路径。我打电话给我的FullyQualifiedFilePath。现在不需要给它一个价值。 在此处输入图像描述

接下来,您将要创建一个Foreach Loop Container. 对于枚举器,选择Foreach File Enumerator。接下来,展开Expressions并为该Directory属性添加一个新表达式。将表达式设置为您在上面创建的变量。 在此处输入图像描述

单击Ok,返回任务编辑器。在 下Enumerator configuration,将您的文件掩码设置为*.pdf,并确保Fully qualifiedTraverse subfolders都被选中。您不需要更改,Folder因为我们上面定义的表达式将在运行时使用,但如果您愿意,您可以。您的Collection选项卡现在应如下所示: 在此处输入图像描述

单击Variable Mappings循环编辑器窗口左侧的选项卡。单击下方的空白矩形Variable并选择您的文件路径变量,并确保将其设置为索引 0。

在此处输入图像描述

Ok在循环编辑器窗口中单击。现在您有一个循环任务,它将为您提供 \network-machine\shared_folder 下每个 *.pdf 的完整路径。循环的每次迭代都会改变FullyQualifiedFilePath变量的值。

从这一点开始,如果您只想将文件路径从第一段存储到表中,您将Execute SQL在循环中创建一个任务,并将文件路径变量用作输入之一。

将 .pdf 作为 BLOB 保存到数据库表中是类似的,但很可能您必须使用脚本任务将每个 .pdf 加载到内存中,然后插入 BLOB。


推荐阅读