を使用して作成されたサンプル SSIS パッケージを次にSSIS 2008 R2
示します。これは、達成しようとしていることを示しています。サンプル パッケージは、受信ファイル データをステージング テーブルに読み込みます。次に、句Rank
とともにSQL Server 関数を使用して、要件に応じてデータをロードできます。Partition
このサンプルでは、データベースのバージョンがSQL Server 2005 or above
. 正確な XML ファイル形式が提供されていないため、入力ファイルとして CSV ファイル形式を使用しました。
Source_001.csv
とという名前の 2 つのサンプル CSV ファイルを作成しましょうSource_002.csv
。パッケージ ロジックの動作を示すためだけに 2 つのファイルが作成されました。


- SQL Server データベースで、という名前の宛先テーブルを作成します
dbo.CategoryName
。これは、データがロードされる最後のテーブルです。Id
列とに複合キーがありますCatType
。

- SQL Server データベースで、という名前のステージング テーブルを作成します
dbo.CategoryName_Staging
。これは、ファイル データが一時的にロードされる場所です。このステージング テーブル構造は、受信ファイル構造を模倣しています。

SQL Server データベースで、この投稿の下部にあるストアド プロシージャ スクリプトdbo.PopulateDestination
のセクションで提供されているスクリプトを使用して名前を付けたストアド プロシージャを作成します。このストアド プロシージャは、関数を句と組み合わせて使用し、CatType 値に割り当てる必要がある正しい Id を識別します。RANK
PARTITION
新しい SSIS パッケージを作成します。という名前の OLE DB 接続マネージャーを作成しますSQLServer
。これは、SQL Server データベースを指します。という名前のフラット ファイル接続マネージャーを作成しましたSource
。

- 以下に示すように、フラット ファイル接続マネージャーを構成します。ソースcsvファイルをパスに配置しました
C:\temp\

- フラット ファイル接続マネージャー エディターの[詳細設定] タブで、列情報の名前を変更します。-整数、-文字列 (10)、-文字列 (30)数値は OutputColumnWidth を示します。
LegacyId
CatType
Name

- SSIS パッケージの [制御フロー] タブで、 を配置し
Execute SQL task
、その後に を配置しData Flow Task
、その後に別の を配置しExecute SQL task
ます。

- 最初の SQL 実行タスクをダブルクリックし、ステージング テーブルを切り捨てるように構成します。

- データ フロー タスクをダブルクリックして、データ フロー タブに切り替えます。[データ フロー] タブ内に、フラット ファイル ソース マネージャーを配置して CSV ファイルを読み取り、OLE DB 宛先を配置してデータをステージング テーブルに書き込みます。

- 以下に示すようにフラット ファイル ソースを構成し、フラット ファイル接続マネージャーを使用してフラット ファイル ソースを読み取ります。


- 以下に示すように、受信データを受け入れて宛先ファイルに書き込むように、OLE DB 宛先を構成します。


- [制御フロー] タブに戻り、最後の SQL 実行タスクを構成して、新しく作成されたストアド プロシージャを呼び出します。パッケージの開発はこれで完了です。

- パッケージを実行します。パッケージは、最初のソース ファイルSource_001.csvのみを読み取るように構成されていることに注意してください。パッケージの実行後、宛先テーブルに対してクエリを実行
CategoryName
して、次のデータを見つけます。

- ここで、SSIS パッケージの実行を停止し、という名前のフラット ファイル接続マネージャーをダブルクリックします
Source
。Source_002.csv
2 番目のファイルを読み取るために、ファイル名のパスを に変更します。

- パッケージを再度実行します。これで、2 番目のソース ファイルSource_002.csvを読み取るようにパッケージが構成されました。この実行により、すでに入力されている宛先テーブルに行が追加されます。パッケージの実行後、宛先テーブルにクエリを実行し
CategoryName
て次の追加データを検索し、Id 列が正しく入力されていることを確認します。
それが役立つことを願っています。

Stored Procedure Script
:
CREATE PROCEDURE [dbo].[PopulateDestination]
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO dbo.CategoryName (Id, CatType, Name, LegacyId)
SELECT MAXID.Id + RANK() OVER(PARTITION BY CatType ORDER BY LegacyId) Id
, CS.CatType
, CS.Name
, CS.LegacyId
FROM dbo.CategoryName_Staging CS
CROSS APPLY (
SELECT COALESCE(MAX(Id), 0) Id
FROM dbo.CategoryName C
WHERE C.CatType = CS.CatType
) MAXID
END