3

同様の列を持つ 2 つの OLEDB データ ソースがあります。

TMP_CRUZTRANS
-------------
CUENTA_CTE numeric (20,0)

TMP_CTACTE_S_USD
----------------
CON_OPE numeric(20,0)

この 2 つのテーブル間で同様の値をすべて減算し、異なる行を保持する必要があります。NOT INSQLクエリで通常使用される制約を実行できるSSIS内の変換/タスクはありますか?

現在、Execute SQL Taskonを使用してこの操作を実行していControl Flowます。

ここに画像の説明を入力

一番上のデータ フローはTMP_CRUZTRANS、2 番目のテーブルで異なる値を保持する必要がある最初のテーブル (他の 2 つのテーブル間のマージ結合... しかし、それは私の質問にとって重要ではないと思います) を作成します。

Execute SQL Taskは、次のステートメントがあります。

INSERT  INTO [dbo].[TMP_CYA] 
SELECT RUT_CLIE, CUENTA_CTE, MONTO_TRANSAC 
FROM [dbo].[TMP_CRUZTRANS]
WHERE CUENTA_CTE NOT IN (SELECT CON_OPE FROM TMP_CTACTE_S_USD)

最後に、新しいテーブルTMP_CYAを使用して作業を続行できます。

このアプローチの問題は、TMP_CRUZTRANS500 万行ほどあるため、SQL 実行タスクを使用してこのすべてのデータをテーブルに挿入するのが非常に遅いことです。この操作を実行するには、約 5 時間かかります。そのため、データ フロー タスク内でこれを行う必要があります。

4

1 に答える 1

7

Lookup transformation要件を達成するために、Data Flow タスク内で availableを使用できます。

これは、達成しようとしていることを示すサンプルです。

データ フロー タスクを含むパッケージを作成します。データ フロー タスク内で、OLE DB ソースを使用してソース テーブルからデータを読み取りますTMP_CRUZTRANS。ルックアップ変換を使用して、特定の列間のテーブルに対して値の存在を検証しdbo.TMP_CTACTE_S_USDます。次に、一致しない出力を OLE DB Destination にリダイレクトして、行をテーブルに挿入しますdbo.TMP_CYA

現在使用している SQL 実行タスクの代わりにデータ フロー タスクを使用すると、次のようになります。

データ フロー タスク

Lookup transformation以下に示すように構成します。

[一般] タブ ページで、一致しない行のみに関心があるため、[Redirect rows to no match outputから] を選択します。Specify how to handle rows with no matching entries

参照変換 一般

[接続] タブ ページで、適切な OLE DB 接続マネージャーを選択し、テーブル dbo.TMP_CTACTE_S_USD を選択します。これは、データを検証するテーブルです。

参照変換接続

[列] タブ ページで、列 CUENTA_CTE をドラッグして CON_OPE にドロップし、ソース テーブルとルックアップ テーブルの間のマッピングを確立します。[OK] をクリックします。

参照変換列

ルックアップ変換OLE DB Destinationに接続すると、 [入出力の選択] ダイアログが表示されます。必ず選択してくださいLookup No Match Output

パッケージ実行前のサンプルです。

実行前

一致しない行が 2 行だけ OLE DB 宛先に転送されていることがわかります。

実行

パッケージの実行後、宛先テーブルに 2 つの一致しない行が含まれていることがわかります。

実行後

それが役立つことを願っています。

于 2013-01-30T15:03:19.933 に答える