Ssis 查询2将基于查询1的输出运行
执行SQL任务将为我们提供数据库列表。根据列表,Query2应在所有数据库上运行 查询1结果: 问题2: 第一步 步骤2 步骤3Ssis 查询2将基于查询1的输出运行,ssis,Ssis,执行SQL任务将为我们提供数据库列表。根据列表,Query2应在所有数据库上运行 查询1结果: 问题2: 第一步 步骤2 步骤3 如何使用查询结果来支持后续查询?在我的例子中,更改目录名,您可以通过使用Foreach循环容器来实现这一点 您将需要以下控制流: executesql Task->Foreach循环容器和容器内的另一个executesql Task 您需要两个变量: 数据库列表(对象) 数据库名称(字符串) 列出具有SQL任务的数据库 使用对象类型(数据库列表)创建用户变量 在
如何使用查询结果来支持后续查询?在我的例子中,更改目录名,您可以通过使用
Foreach循环容器来实现这一点
您将需要以下控制流:
executesql Task->Foreach循环容器
和容器内的另一个executesql Task
您需要两个变量:
- 数据库列表(对象)
- 数据库名称(字符串)
列出具有SQL任务的数据库
- 使用
对象
类型(数据库列表)创建用户变量
- 在
常规
窗格中,将结果集
属性设置为完整结果集
- 在
Result Set
窗格上,设置添加新行(Result Name=0,Variable Name=User::DatabaseList
)
这将查询数据库并将列表存储在对象中
注意在执行SQL任务的第一个查询中,一条记录中应该有一个数据库名称。每个记录都将由Foreach循环处理
在SQL命令任务之后添加一个Foreach循环容器
- 在
集合
窗格上,将枚举器
设置为Foreach ADO枚举器
- 选择
User::DatabaseList
作为ADO对象源变量
- 在
变量映射
窗格中添加一个新条目(Variable=User::DatabaseName,Index=0
)
在Foreach循环容器中添加一个executesql任务
,
,并正常设置
- 在
常规
窗格中将ResultSet
属性设置为None
- 将查询复制到剪贴板
突出显示容器内的SQL任务,然后按F4(打开属性选项卡)
添加一个设置SqlStatementSource
属性的新表达式。作为表达式,添加一个返回数据库查询的表达式(基于User::DatabaseName)
可以使用表达式动态设置对象的某些属性。(此方法也适用于数据流任务
,只是要设置的属性(使用表达式)可能不同)
注意如果您想使用DFT,那么表应该具有相同的结构(查询返回的列的元数据在SSIS中应该是相同的)您是否有固定的databasename计数,或者它将是一个可能增加或减少的变量?计数不是固定的,我会一直变化(每天)。您可以创建输出作为存储过程中的变量,作为字符串,与数据库名称连接,用逗号分隔,并在SSIS中使用参数映射,将在SSIS变量中为您提供输出。此外,您可以在foreach循环容器中使用该变量,并在拆分功能后使用数据库名称执行格式化查询。我有是否尝试调用SP Exec SP_Call_生产?但它不起作用。错误:“查询有问题”、“ResultSet”属性设置不正确、参数设置不正确或连接建立不正确。”我已完成所有步骤。当我单击execute Error时:对于完整的结果集和XML结果,结果绑定名称必须设置为零。哪个SQL任务引发此错误?如果是内部的,则将常规窗格上的ResultSet属性设置为“None”Ohh,我得到了它:在第一个SQL任务中,在结果集
窗格中:结果名=0,变量名=User::DatabaseList
我已经完成了这项工作,如何在最终查询中传递变量。这是Exec SP调用生产的正确方式吗?如果?是数据库名称,则为是,但在本例中不必使用表达式,因为可以在不使用表达式的情况下传递参数。(在参数映射
窗格中添加参数(变量名称=用户::数据库名称,方向=输入,数据类型=NVARCHAR,参数名称=0,参数大小=-1或128)
databasename1
databasename2
databasename3
select * from databasename1.dbo.tablename
select * from databasename2.dbo.tablename
select * from databasename3.dbo.tablename