【问题标题】:SSIS For Each Loop crashes the flat file connectionSSIS For Each Loop 使平面文件连接崩溃
【发布时间】:2014-06-25 22:58:35
【问题描述】:
我创建了一个简单的 SSIS 包来将平面文件 (.txt) 导入数据库表。测试了它,它工作得很好。由于我有几个要导入的文件,我添加了一个 foreach 循环来遍历所有文件,按照网上找到的几个示例中的建议添加了变量,但现在我的平面文件连接管理器返回错误“必须是有效的文件名被选中。”并且包将不会运行。到目前为止,我未能成功找到解决此问题的方法,并感谢本论坛 SSIS 专家提供的任何建议。非常感谢!
这是我的变量方式:
- SourceFileFolder 是包含文件的文件夹的路径
- FileName 一个字符串,其中包含我要导入的文件的名称之一
- SourceFilePath,它是一个表达式驱动的变量,将前两个变量串联在一起。我可以单击“评估表达式”并将其复制并粘贴到 Windows 资源管理器中并打开文件
- ArchivePath 是一个表达式驱动的变量,它创建文件处理后归档到的路径。
【问题讨论】:
标签:
ssis
sql-server-2008-r2
connection
【解决方案1】:
正如消息所说,这与您的连接管理器没有收集连接字符串有关。这可以使用以下方法处理:
首先清除SourceFilePath变量上的表达式。
使用您的 Foreach 循环容器,进行如下设置:
这将使用您的变量 SourceFileFolder 作为文件夹,例如,您也可以硬编码文件夹名称 C:\。还要确保您的文件夹是正确限定的,即确保它以斜线结尾 C: 不起作用,但 C:\ 会起作用。
接下来,您需要将完全限定名称映射到您的其他变量 SourceFilePath
现在应该将循环找到的文件的全名存储到SourceFilePath 变量中。对于实例C:\File.txt,您现在可以将其用作文件连接管理器上的连接字符串表达式。
在连接管理器的属性下,确保表达式设置为ConnectionString,然后使用SourceFileName 变量。
还要确保延迟验证设置为真
希望这意味着您可以遍历文件。