执行SQL任务将为我们提供数据库列表。基于列表,Query2应该在所有数据库上运行。
databasename1
databasename2
databasename3
select * from databasename1.dbo.tablename
select * from databasename2.dbo.tablename
select * from databasename3.dbo.tablename
如何使用查询结果为后续查询提供支持?在我的例子中,更改目录名称
答案 0 :(得分:2)
您可以使用Foreach Loop Container
。
您需要以下控制流程:
Execute SQL Task -> Foreach Loop Container
和容器内的另一个Execute SQL Task
。
您需要两个变量:
使用SQL任务列出数据库
Object
类型(DatabaseList)General
窗格中,将ResultSet
媒体资源设为Full result set
Result Set
窗格中设置添加新行(Result Name = 0, Variable Name = User::DatabaseList
)这将查询数据库并将列表存储在对象中。
注意第一个Execute SQL Task
查询中的一条记录中应该有一个数据库名称。每条记录都将由Foreach循环处理。
在Foreach Loop Container
SQL Command Task
Collection
窗格中,将Enumerator
设置为Foreach ADO Enumerator
User::DatabaseList
作为ADO object source variable
Variable Mappings
窗格中添加新条目(Variable = User::DatabaseName, Index = 0
) 在Execute SQL Task
中添加Foreach Loop Container
并正常设置。
ResultSet
窗格上将None
属性设置为General
。突出显示Container内的SQL任务,然后按F4 (打开属性选项卡)。
添加一个设置SqlStatementSource
属性的新表达式。当Expression添加一个表达式,该表达式返回数据库的查询(基于User :: DatabaseName)。
您可以使用表达式动态设置对象的某些属性。 (此方法也适用于Data Flow Task
只需要设置的属性(使用表达式)可能不同)
注意如果要使用DFT,那么表应该具有相同的结构(查询返回的列的元数据在SSIS中应该相同)