0

SSIS 2008 の ado net データセットにストアド プロシージャを設定しています。結果セットには 21 列が含まれます。SSIS で For Each ループを使用する場合、最初の 2 つの列が必要な場合、20 番目の列ではインデックス 0、1、19 を使用できないようです。インデックス 19 を使用したいのですが、必要なフィールドだけを使用する方法はありますか?

前もって感謝します。

4

1 に答える 1

3

正常に動作します。何に遭遇しているのかわかりません。

クラシック オフ バイ ワン グッド ジョブ ミー

Foreach ループ コンテナーにフィードする SQL 実行タスクを含む基本的なパッケージを作成しました。

私のソース クエリは醜いですが、私の怠惰を満足させます

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その完全な結果セットをObject 型の SSIS 変数にプッシュします。

Foreach ループ コンテナー内で、変数とを序数位置 0、1、および 19にマップしますCol00Col01Col19

ここに画像の説明を入力

すべてのものをビムル

Visual Studio の無料アドオンであるBIDS Helperをお持ちの場合は、数回クリックするだけで私のソリューションを再作成できます。Biml はビジネス インテリジェンス マークアップ言語であり、BI のオペレーティング システムと考えてください。ここでは、XML を使用して、必要な SSIS パッケージを記述します。

  1. SSIS プロジェクトに新しい .biml ファイルを追加する
  2. 有効なデータベースを指すように 3 行目を修正します。
  3. biml ファイルを右クリックし、[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>
于 2015-03-23T21:32:14.690 に答える