SSIS Foreach循环文件夹作为变量

thu*_*eek 14 ssis sql-server-2008 foreach-loop-container

我需要将Foreach循环中的Folder设置为变量位置.我尝试将位置添加到我的包配置中,它的作用就像它有效,但是当我打开配置文件时,它不在那里.

我把它设置为Foreach File Enumerator,路径是硬编码的,并且检索完全限定的文件名.我的变量Mappings有一个变量CurrentFile,索引为0.

因此,我已将其更改为Foreach From Variable Enumerator,其SourceFiles变量为\ server\path*.*.但现在它抱怨CurrentFile,分配的值类型与变量类型(字符串)不同.

我猜我需要以某种方式在集合选项卡上使用带有枚举器的表达式?怎么样?

  • 一般:Foreach循环容器
  • 收集:来自Varialbe枚举器的Foreach; 变量是User :: SourcePath; 表达式(未使用)
  • 变量映射:Variable User :: CurrentFile,Index 0
  • 表达式:(未使用)

错误:MyPackage中的0xC001F009:分配给变量"User :: CurrentFile"的值的类型与当前变量类型不同.变量在执行期间可能不会更改类型.变量类型是严格的,但Object类型的变量除外.错误:Foreach循环容器中的0xC001C012:ForEach变量映射编号1到变量"User :: CurrentFile"无法应用.

thu*_*eek 20

一位同事向我展示了如何让它发挥作用.不要将其更改为"Foreach from Variable Enumerator",但将其保留为"Foreach File Enumerator".

  • 收集:Foreach文件枚举器; 放入Enumerator配置中的文件夹和文件.在"表达式"下,将"目录"设置为指向目录的用户变量(它将优先于您输入的文件夹); 将FileSpec设置为指向文件的用户变量(将优先于您输入的文件).
Directory @[User::SourcePath]  (value: \\server\directory)
FileSpec @[User::CopyFileName] (value: *.*)
Run Code Online (Sandbox Code Playgroud)
  • 变量映射:变量用户::当前文件,索引0
  • 表达式:(未使用)

  • 只是对这个伟大解决方案的一个小小的澄清。ForEach 循环中有多个位置可以更改表达式值。确保使用“集合”选项卡上的“枚举器”字段正下方的那个,因为它是此“目录”值存在的唯一位置。 (8认同)
  • 十多年后,我换了一份工作,这对我很有帮助! (2认同)