問題タブ [flatfilesource]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ssis - SSIS : Flat File Source Transforming it into Two OLE DB SQL Table (OLEDB ソースにロードする前に変換して並べ替えるとエラーがスローされる)
フラットファイルを取得して、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 でのテーブルのセットアップ方法に関する詳細を提供する必要がある場合は、詳細を提供できます。
csv - SSIS フラット ファイル接続
以下に示すように、フラットファイルを取得しています。このデータをロードするためにssisを使用しています。9 つの動的な列名があり、最初の 3 つの列のみに行データがあり、残りにはデータがありません。
フラット ファイル接続マネージャーで。私は選択しました:
- {CR}{LF} としての行区切り
- コンマ {,} としての列区切り文字
ファイルの内容:
パッケージを実行すると、データは次のように書き込まれます
dynamic - 各ループで異なる列を持つ同じファイル名
同じファイル名を検索する foreach ループがありますが、パスごとに、ファイルは異なる列で異なる方法で取り込まれます。私のフラットファイルソースは、新しく再構築されたファイルを読み込もうとするとエラーをスローします - 私のレコードセット宛先も同様にエラーをスローすることを期待しています。
フラットファイルのソースとレコードセットの宛先を使用しています。これには別のスクリプト タスクを使用する必要があると考えていますが、これら 2 つのタスクで動作させる方法があれば、それは素晴らしいことです
異なる列で同じファイル名を再利用したかった