将来自多个文件夹的多个PDF导入到SQL表中。

时间:2018-08-20 20:54:27

标签: sql mysqli ssis ssis-2012

我需要将多个文件夹(共享目录)中的多个PDF文件上载到SQL表中。完成此任务并将其自动化的最佳方法是什么?数据库表结构看起来像这样> DB table format

文件列表是完整路径。 类型是文件所在的文件夹,文件名是文件名和Ext。 共享文件夹中的文件是扫描的PDF。 17个文件夹深。 PDF's in one folder 共享树如下所示: folder tree 这可以通过存储过程来完成,在该过程中将删除DB表(因为另一个任务将扫描该表并将pdf散列到CMR中),并将共享文件夹扫描并导入到该表中。这失败了,失败点是xp_cmdshell,我沿着添加代理的那条路线走了,它仍然使命令失败。必须有更好的方法从这些文件夹上载多个PDF,然后在移动它们后从文件夹中删除文件。 有什么建议么?或指向正确的方向?

1 个答案:

答案 0 :(得分:0)

您首先要创建两个字符串变量。第一个将包含共享文件夹树的基本文件夹的路径。我叫我的PathToBaseFolder。第二个将用于存储当前文件的完整路径。我叫我的FullyQualifiedFilePath。现在无需给它一个值。 enter image description here

接下来,您将要创建一个Foreach Loop Container。对于枚举器,选择Foreach File Enumerator。接下来,展开Expressions,并为Directory属性添加一个新表达式。将表达式设置为您在上面创建的变量。 enter image description here

单击Ok,然后返回任务编辑器。在Enumerator configuration下,将文件掩码设置为*.pdf,并确保同时选中Fully qualifiedTraverse subfolders。您不需要更改Folder,因为上面定义的表达式将在运行时使用,但是您可以根据需要进行更改。您的Collection标签现在应如下所示: enter image description here

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

enter image description here

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

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

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