0

我正在使用存储过程填充 SSIS 2008 中的 ado 网络数据集。结果集包含 21 列。在 SSIS 中使用 For Each 循环时,如果我想要前两列,那么第 20 列我不能使用索引 0,1,19。看来我必须为 2-18 使用创建映射如果我想使用索引 19。有没有办法只使用你想要的字段?

提前致谢。

4

1 回答 1

3

工作正常,我不确定你遇到了什么。

经典之作,我做得很好

我创建了一个基本包,其中将执行 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;

我将完整的结果集推送到一个名为rsResultsObject 类型的 SSIS 变量中。

在我的 Foreach 循环容器中,我将 variablesCol00和映射到序数位置 0、1 和Col0119Col19

在此处输入图像描述

比姆所有的东西

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

  1. 将新的 .biml 文件添加到您的 SSIS 项目
  2. 修复那里的第三行以指向有效的数据库
  3. 右键单击 biml 文件并选择“生成 SSIS 包”
  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>
于 2015-03-23T21:32:14.690 回答