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 循环容器中,我将变量 Col00Col01Col19 映射到顺序位置 0、1 和 19

Biml 所有的东西

如果您有 Visual Studio、BIDS Helper 的免费插件,您只需点击几下即可重新创建我的解决方案。 Biml 是商业智能标记语言,可以将其视为 BI 的操作系统。这里我们将使用一些XML来描述我们想要的SSIS包。

  1. 将新的 .biml 文件添加到您的 SSIS 项目
  2. 修正那里的第三行以指向有效的数据库
  3. 右击biml文件select"Generate SSIS Package"
  4. 利润
<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>