0

フラットファイルを取得して、SSIS と Load to a OLEDB Source (SSMS) の 2 つのテーブルに変換しようとしています。行が , で区切られているフラット ファイルと一致する SSMS で作成されたテーブルが既にあります。フラット ファイルのデータ型が、SSMS のテーブルで設定した nvarchar データ型とは異なるため、データ変換 Transform を実行する必要がありました。現在のパッケージでいくつかの障害が発生しており、宛先にロードする前にエラーをスローせずにデータを OLEDB にロードできません。

SSMSでセットアップした2つのテーブル。1 つには主キー (Unique_ID) があり、その主キーは他のテーブルで同じ (Unique_ID) 外部キーを参照します

今、私が持っている制御フローで

新しいロードの前にテーブルを切り捨てる SQL タスクを実行 -> 新しいテーブルごとに 2 つのデータ フロー タスク

最初のテーブルに設定したデータ フロー タスクは次のとおりです -> 1.Txt ファイル フラット ソース 2.文字列 [DT_STR] を Unicode 文字列 [DT_WSTR] に変換するためのデータ変換 3.並べ替え ->データ変換ですが、行はまだ複製されており、宛先に到達する前にエラーがスローされています (重複した並べ替え値を削除するためにチェックボックスをチェックしています) 4.OLE DB 宛先

エラーは次のとおりです。「OLE DB レコードが利用可能です。ソース: "Microsoft SQL Server Native Client 11.0" Hresult: 0x80004005 説明: "PRIMARY KEY 制約 'PK' の違反。オブジェクト 'dbo.' に重複するキーを挿入できません。重複キー値は (123) です。".

データビューアでは、必要のない複製レコードが主キー制約の原因となっています。例:

データ変換.sequence
123 姓 名
123 姓 名

2 番目のデータ フロー タスクは最初のデータ フロー タスクと似ていますが、宛先のテーブルと使用する列が異なります。

私は多くの投稿を見て、この問題を調査しました。私は SSIS を初めて使用し、パフォーマンスの観点から、これらの 2 つの新しいテーブルを OLEDB の宛先にロードするための最良の方法を探しています。任意の推奨事項をいただければ幸いです。

回答が必要ないくつかの質問:

1.パッケージを実行する前に、2 つのテーブル間に主キーと外部キーを設定できますか? 2 番目のテーブルのプライマリ キーを参照するプライマリ キーと外部キーなしで、フラット ファイルを 2 つのテーブルにロードできました。将来これらのテーブルを結合できるようにする必要があるため、2 つのテーブル間の参照整合性を維持する必要があります。2. 現在実行している変換を使用して、SSIS でこれを正しい方法で行っていますか? ソース (フラット ファイル) と変換先 (OLEDB ソース) でデータ型が異なるため、ルックアップ変換を使用できません。

私が使用したパッケージまたはフラットファイルと、SSMS でのテーブルのセットアップ方法に関する詳細を提供する必要がある場合は、詳細を提供できます。

4

0 に答える 0