Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ssis 查询2将基于查询1的输出运行_Ssis - Fatal编程技术网

Ssis 查询2将基于查询1的输出运行

Ssis 查询2将基于查询1的输出运行,ssis,Ssis,执行SQL任务将为我们提供数据库列表。根据列表,Query2应在所有数据库上运行 查询1结果: 问题2: 第一步 步骤2 步骤3 如何使用查询结果来支持后续查询?在我的例子中,更改目录名,您可以通过使用Foreach循环容器来实现这一点 您将需要以下控制流: executesql Task->Foreach循环容器和容器内的另一个executesql Task 您需要两个变量: 数据库列表(对象) 数据库名称(字符串) 列出具有SQL任务的数据库 使用对象类型(数据库列表)创建用户变量 在

执行SQL任务将为我们提供数据库列表。根据列表,Query2应在所有数据库上运行

查询1结果: 问题2: 第一步 步骤2 步骤3
如何使用查询结果来支持后续查询?在我的例子中,更改目录名,

您可以通过使用
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