任何帮助深表感谢.我正在尝试创建一个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任务之后.如果要移动文件,即使存储过程失败,也可以将约束选项更改为"完成".
您想要做的是在包中创建一个变量,将其命名为“Filename”之类的名称。在 Foreach 的编辑窗口中,您可以配置要设置的变量(在变量映射页面上将索引设置为 0)。
要创建变量,您需要显示“变量”窗口。如果当前未打开,请使用“查看”菜单来显示它。
然后,在调用存储过程时,您可以将变量的当前值作为参数传递。
此链接可能会有所帮助:https://www.simple-talk.com/sql/ssis/ssis-basics-introducing-the-foreach-loop-container/