sql-server - SSIS 变量作用域问题

标签 sql-server visual-studio-2012 ssis integration etl

我正在尝试使用 foreach 循环迭代文档中的几个 Excel 文件。因此,在我的控制流中,我拖放一个 For Each 循环容器。然后,我创建一个名为 ExcelFilePath 的新变量并将其放在 foreach 循环范围下:

enter image description here

然后,我编辑 foreach 循环并将其变量映射设置为映射到创建的变量:

enter image description here

太棒了。因此,现在在这个阶段,我假设 foreach 循环的每次迭代都会将当前 Excel 文件的文件路径(或其他内容)存储在该变量中。

接下来,我插入一个数据流任务并添加一个 Excel 源。最初,我创建一个 Excel 连接管理器,只是为了指向文档中正确的工作表并指定我想要的列。我对其进行了测试,发现预览效果很好。

enter image description here

不错。接下来我想更改连接管理器,以便它不会始终映射到同一个文件,而是使用 foreach 循环设置的变量,指定要使用的文件。因此,我右键单击 Excel 连接管理器 > 属性,然后添加一个表达式。我为“属性”选择“ExcelFilePath”,并查找我创建的 ExcelFilePath 变量,该变量将位于 foreach 循环范围内。但什么也没有。无处可寻。

enter image description here

我在这里做错了什么?我已经严格按照有关该主题的各种教程进行操作,但在我这边却找不到 foreach 变量??

编辑

然后我继续将变量的范围从 foreach 循环范围更改为“package”范围。嘿,我现在可以看到它了,完美。我选择它并发生这种情况:

enter image description here

编辑2

终于成功了,但现在我还有另一个错误:

enter image description here

老实说,我不知道如何使用它来完成任何工作。我向你脱帽致敬。我的意思是错误代码0x80004005,这是什么意思?!

最佳答案

我认为,我们不能使用变量进行 Excel 连接,该变量将在运行时更改时指向数据文件,因为 Excel 和 SSIS 中存在很多问题。

所以,你需要像下面这样的东西。

在数据流任务之前为每个循环容器添加一个脚本任务。 还创建一个具有静态位置的模板文件,该文件具有相同的 header ,其中包含文件。

现在,在每个循环中迭代文件时。我们正在处理的特定迭代的文件需要使用脚本任务替换模板。

Excel 连接管理器始终指向模板文件。

  what ever file name you getting by for each loop need to replace template 

关于sql-server - SSIS 变量作用域问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31046926/

相关文章:

python - 使用参数 : pandas (or pyodbc) not functioning properly 从 SQL Server 读取

tfs - 将 TFS 2010 项目(历史、工作项、代码等)移动到 TFS 2012

sql - 在SSIS中导入已合并单元格的Excel

sql-server - 表外键/自身关联?

c# - asp.net mvc项目中如何访问LocalDB

C++ 如何修复多重声明编译器错误

CSS !Visual Studio Express 中的重要声明

sql - 将列数据放入正确的目标列sql ssis

sql-server - SSIS 无法访问每个人都有权访问的文件夹

python - 具有数据库连接的多处理