【问题标题】:Looping in SSIS via source tables通过源表在 SSIS 中循环
【发布时间】:2016-12-12 10:23:46
【问题描述】:
我们有一个包含同一数据库的多个实例的数据库服务器。枚举所有数据库(例如 MyDB001 到 MyDB006)。所有实例都有相同的表。
出于报告目的,我们希望将所有这些数据库提取到一个数据库中。
当前的解决方案是在 SSIS 中有多个连接 - 每个 DB 有一个专用连接。每个数据库还有一个数据流来提取表。如果我们需要更改提取,这会导致更改多个数据流。
有没有一种聪明的方法来循环数据库?例如。使用参数获取到数据库的连接,然后有一个数据流使用此参数化连接来获取数据?
提前感谢您的任何提示。
傻瓜
【问题讨论】:
标签:
sql
sql-server
windows
ssis
etl
【解决方案1】:
是的,你可以。您只需从具有源和目标的数据流开始。点击控制流中的背景,属性,将保护级别更改为不保存敏感。
单击源连接、属性,将连接字符串复制并粘贴到文本编辑器。还是在属性,表达式,点击...然后在属性表达式编辑器,从属性下拉框,选择连接字符串,在表达式中,你定义连接字符串并指向你想要的数据库,你可以把你的连接字符串早先保存到文本编辑器并进行相应修改,例如更改为您想要的数据库。
玩弄它直到你理解上面的意思并且你可以改变连接字符串表达式来指向任何源表。明白这一点后,就可以开始循环部分了。添加两个变量,一个是 cs(类型字符串),这将是您的动态数据库连接字符串,第二个是 rs(类型对象),这将保存数据库连接的集合。在控制流中,添加一个execute sql任务,一个foreach循环容器,将execute sql任务连接到容器,将数据流拖放到容器中。打开执行 sql 任务,在一般选项卡中,sqlstatement,您定义数据库连接的集合
类似于: select val from tabl(tal 将所有数据库连接存储在 val 列中)。在结果集中,选择完整结果集。在结果集选项卡中,将结果名称更改为 0,将变量更改为变量 rs。这会将数据库连接字符串的集合映射到变量 rs。
接下来双击 foreach 循环容器进行编辑。在集合选项卡中,选择Foreach ADO Enumerator,在ADO对象源变量中,选择变量rs。在变量映射选项卡中,在变量中选择cs,索引应该为0。
现在在您的数据流中,单击源连接,在表达式中,将连接字符串设置为变量 cs。测试并玩得开心。
全图: