SSIS - 如何遍历文件夹中的文件并获取路径+文件名,最后使用参数作为Path + Filename执行存储过程

Sai*_*Sai 13 ssis ssis-2012

任何帮助深表感谢.我正在尝试创建一个SSIS包来循环文件夹中的文件并获取Path +文件名,最后使用参数path + filename执行存储过程.我不知道如何获取路径+文件名并将其作为参数插入到存储过程中.我附上了截图供您参考.

Mat*_*att 18

看起来你一般都有正确的想法,所提供的链接@Speedbirt186有一些很好的细节,但听起来有一些细微差别我认为我可能会指出流量和变量.

foreach循环可以将整个路径或文件名或文件名和扩展名分配给变量.如果您不想添加脚本任务以从路径中拆分文件名,则后者将是您的最佳帮助.如果您首先在项目中添加5个变量,它将使它变得更容易一些.1将是源目录路径,另一个是目标(存档)目录路径,然后1用于保存由每个循环分配的文件名和扩展名.然后是另外两个动态变量,它们只是将源目录和文件名组合在一起以获取源完整路径,并使用文件名来组合目标以获取目标完整路径.

在此输入图像描述

接下来确保设置数据库和Excel文件连接.在设置后的Excel文件连接中,转到属性窗口中的表达式,并将"连接字符串"属性设置为SourceFullPath.这将告诉连接在循环的每次迭代时更改文件路径.

在此输入图像描述

现在您只需要设置循环等.添加每个循环容器设置目录,过滤,然后选择文件名和扩展名.

在此输入图像描述

现在,在集合页面的表达式框中,将directory属性设置为Source Directory变量的属性.

在此输入图像描述

Fore每个循环的最后一部分是设置变量映射以将文件名存储在变量中.所以转到该选项卡选择您的文件名变量并将index设置为0.

在此输入图像描述

此时,您可以添加数据流并设置导入,就像使用普通文件一样(请注意,文件名参数的默认值应该是具有您要导入的结构的实际文件).

在您的执行SQL任务中丢弃数据流并根据需要进行设置.这是一个直接输入的例子,你可以看到一个简单的方法来引用一个参数只是一个问号(?).

在此输入图像描述

接下来在您的sql任务设置中通过添加所需的详细信息来设置参数映射,例如:

在此输入图像描述

现在,您将继续执行文件任务.根据需要删除文件任务和设置,但选择目标和源完整路径变量以告知任务要移动的文件.

在此输入图像描述

这就是你的成就.还有一件事需要注意.在您发布的图像中设置优先级的方式显示从数据流到sql以及同时执行文件任务.如果您的存储过程依赖于您的文件,您可能希望将其放在sql任务之后.如果要移动文件,即使存储过程失败,也可以将约束选项更改为"完成".

在此输入图像描述 在此输入图像描述

  • @DatabaseCoder Microsoft 可能允许使用仅指定文件夹的辅助方法,此时它将使用与源文件相同的名称,但是此代码是正确的并且经过测试。使用完整路径使您能够在移动时更改名称。因此,如果您不更改文件名,也许您建议的编辑会起作用。 (2认同)

Sve*_*man 4

您想要做的是在包中创建一个变量,将其命名为“Filename”之类的名称。在 Foreach 的编辑窗口中,您可以配置要设置的变量(在变量映射页面上将索引设置为 0)。

要创建变量,您需要显示“变量”窗口。如果当前未打开,请使用“查看”菜单来显示它。

然后,在调用存储过程时,您可以将变量的当前值作为参数传递。

此链接可能会有所帮助:https://www.simple-talk.com/sql/ssis/ssis-basics-introducing-the-foreach-loop-container/