SSIS ForEach 循环中的变量映射
Variable Mappings in SSIS ForEach Loop
我正在使用存储过程在 SSIS 2008 中填充一个 ado net 数据集。结果集包含 21 列。在 SSIS 中使用 For Each 循环时,似乎如果我想要前两列,那么第 20 列我不能使用索引 0,1,19。看来我必须使用 create mappings for 2-18 if我想使用索引 19。有没有办法只使用你想要的字段?
提前致谢。
工作正常,我不确定你 运行 喜欢什么。
我创建了一个基本包,其中包含将 SQL 任务馈送到 Foreach 循环容器中。
我的源码查询很丑,但是满足了我的懒惰
SELECT
*
FROM
(
SELECT TOP 21
CAST(ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS int) AS rn
FROM
sys.all_columns AS AC
) D
PIVOT
(
max(rn)
FOR rn IN ([1]
, [2]
, [3]
, [4]
, [5]
, [6]
, [7]
, [8]
, [9]
, [10]
, [11]
, [12]
, [13]
, [14]
, [15]
, [16]
, [17]
, [18]
, [19]
, [20]
, [21]
)
) P;
我将该完整的结果集推送到名为 rsResults
的 SSIS 变量中,类型为 Object。
在我的 Foreach 循环容器中,我将变量 Col00
、Col01
和 Col19
映射到顺序位置 0、1 和 19
Biml 所有的东西
如果您有 Visual Studio、BIDS Helper 的免费插件,您只需点击几下即可重新创建我的解决方案。 Biml 是商业智能标记语言,可以将其视为 BI 的操作系统。这里我们将使用一些XML来描述我们想要的SSIS包。
- 将新的 .biml 文件添加到您的 SSIS 项目
- 修正那里的第三行以指向有效的数据库
- 右击biml文件select"Generate SSIS Package"
- 利润
<Biml xmlns="http://schemas.varigence.com/biml.xsd">
<Connections>
<!-- UPDATE ME -->
<OleDbConnection Name="CM_OLE" ConnectionString="Data Source=localhost\dev2014;Initial Catalog=tempdb;Provider=SQLNCLI10.1;Integrated Security=SSPI;Auto Translate=False;" />
</Connections>
<Packages>
<Package ConstraintMode="Linear" Name="so_29220275">
<Variables>
<Variable DataType="Object" Name="rsResults" />
<Variable DataType="Int32" Name="Col00">-1</Variable>
<Variable DataType="Int32" Name="Col01">-1</Variable>
<Variable DataType="Int32" Name="Col19">-1</Variable>
<Variable DataType="String" Name="QuerySource"><![CDATA[SELECT
*
FROM
(
SELECT TOP 21
CAST(ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS int) AS rn
FROM
sys.all_columns AS AC
) D
PIVOT
(
max(rn)
FOR rn IN ([1]
, [2]
, [3]
, [4]
, [5]
, [6]
, [7]
, [8]
, [9]
, [10]
, [11]
, [12]
, [13]
, [14]
, [15]
, [16]
, [17]
, [18]
, [19]
, [20]
, [21]
)
) P;
]]></Variable>
</Variables>
<Tasks>
<ExecuteSQL ConnectionName="CM_OLE" Name="SQL - gen data" ResultSet="Full">
<VariableInput VariableName="User.QuerySource" />
<Results>
<Result VariableName="User.rsResults" Name="0"></Result>
</Results>
</ExecuteSQL>
<ForEachAdoLoop SourceVariableName="User.rsResults" ConstraintMode="Linear" Name="FELC 3 of 20">
<VariableMappings>
<VariableMapping VariableName="User.Col00" Name="0" />
<VariableMapping VariableName="User.Col01" Name="1" />
<VariableMapping VariableName="User.Col19" Name="19" />
</VariableMappings>
<Tasks>
<ExecuteSQL ConnectionName="CM_OLE" Name="SQL - do nothing">
<DirectInput>SELECT 1;</DirectInput>
</ExecuteSQL>
</Tasks>
</ForEachAdoLoop>
</Tasks>
</Package>
</Packages>
</Biml>
我正在使用存储过程在 SSIS 2008 中填充一个 ado net 数据集。结果集包含 21 列。在 SSIS 中使用 For Each 循环时,似乎如果我想要前两列,那么第 20 列我不能使用索引 0,1,19。看来我必须使用 create mappings for 2-18 if我想使用索引 19。有没有办法只使用你想要的字段?
提前致谢。
工作正常,我不确定你 运行 喜欢什么。
我创建了一个基本包,其中包含将 SQL 任务馈送到 Foreach 循环容器中。
我的源码查询很丑,但是满足了我的懒惰
SELECT
*
FROM
(
SELECT TOP 21
CAST(ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS int) AS rn
FROM
sys.all_columns AS AC
) D
PIVOT
(
max(rn)
FOR rn IN ([1]
, [2]
, [3]
, [4]
, [5]
, [6]
, [7]
, [8]
, [9]
, [10]
, [11]
, [12]
, [13]
, [14]
, [15]
, [16]
, [17]
, [18]
, [19]
, [20]
, [21]
)
) P;
我将该完整的结果集推送到名为 rsResults
的 SSIS 变量中,类型为 Object。
在我的 Foreach 循环容器中,我将变量 Col00
、Col01
和 Col19
映射到顺序位置 0、1 和 19
Biml 所有的东西
如果您有 Visual Studio、BIDS Helper 的免费插件,您只需点击几下即可重新创建我的解决方案。 Biml 是商业智能标记语言,可以将其视为 BI 的操作系统。这里我们将使用一些XML来描述我们想要的SSIS包。
- 将新的 .biml 文件添加到您的 SSIS 项目
- 修正那里的第三行以指向有效的数据库
- 右击biml文件select"Generate SSIS Package"
- 利润
<Biml xmlns="http://schemas.varigence.com/biml.xsd">
<Connections>
<!-- UPDATE ME -->
<OleDbConnection Name="CM_OLE" ConnectionString="Data Source=localhost\dev2014;Initial Catalog=tempdb;Provider=SQLNCLI10.1;Integrated Security=SSPI;Auto Translate=False;" />
</Connections>
<Packages>
<Package ConstraintMode="Linear" Name="so_29220275">
<Variables>
<Variable DataType="Object" Name="rsResults" />
<Variable DataType="Int32" Name="Col00">-1</Variable>
<Variable DataType="Int32" Name="Col01">-1</Variable>
<Variable DataType="Int32" Name="Col19">-1</Variable>
<Variable DataType="String" Name="QuerySource"><![CDATA[SELECT
*
FROM
(
SELECT TOP 21
CAST(ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS int) AS rn
FROM
sys.all_columns AS AC
) D
PIVOT
(
max(rn)
FOR rn IN ([1]
, [2]
, [3]
, [4]
, [5]
, [6]
, [7]
, [8]
, [9]
, [10]
, [11]
, [12]
, [13]
, [14]
, [15]
, [16]
, [17]
, [18]
, [19]
, [20]
, [21]
)
) P;
]]></Variable>
</Variables>
<Tasks>
<ExecuteSQL ConnectionName="CM_OLE" Name="SQL - gen data" ResultSet="Full">
<VariableInput VariableName="User.QuerySource" />
<Results>
<Result VariableName="User.rsResults" Name="0"></Result>
</Results>
</ExecuteSQL>
<ForEachAdoLoop SourceVariableName="User.rsResults" ConstraintMode="Linear" Name="FELC 3 of 20">
<VariableMappings>
<VariableMapping VariableName="User.Col00" Name="0" />
<VariableMapping VariableName="User.Col01" Name="1" />
<VariableMapping VariableName="User.Col19" Name="19" />
</VariableMappings>
<Tasks>
<ExecuteSQL ConnectionName="CM_OLE" Name="SQL - do nothing">
<DirectInput>SELECT 1;</DirectInput>
</ExecuteSQL>
</Tasks>
</ForEachAdoLoop>
</Tasks>
</Package>
</Packages>
</Biml>