2

問題は、データのソースが XML ファイル + XSD スキーマであるリレーショナル テーブルにデータをインポートすることです。XML ソースにはいくつかの出力があり、ノード間の関係は SSIS によって order_id (XML にはない生成された主キー値) として列に作成され、たとえば注文の詳細で外部キー order_id を取得します。

ファイルがインポートされ、注文と注文の詳細の間で正しい参照整合性が得られますが、キーは各ファイル内でのみ一意であるため、同じファイルが再度インポートされると、ssis によって同じ ID が生成/使用されます。

どうすれば一意性を確保し、ID の生成方法を制御できますか。

動作する注文テーブルで ID 列を order_id として使用しようとしましたが、注文の詳細などの参照テーブルに反映されません...

私たちが持っている場合の例

<order some attributes ...>
    <orderdetails some attributes ...></orderdetails> 
    <orderdetails some attributes ...></orderdetails> 
</order> 

ssis に行をインポートさせるだけで、次のような結果が得られます。

注文表

order_id = 4 、残りのデータ列

注文明細テーブル

行 1 orderdetail 列、order_id=4 行 2 orderdetail 列、order_id=4

すべて問題ありませんが、明らかに半ランダムな id = 4 がどのように生成されるのかわかりません

増分キーが使用されている場合 (シードが 1 から始まると仮定)

注文表

order_id = 1 、残りのデータ列

注文明細テーブル

行 1 orderdetail 列 , order_id=4 <-- 以前に生成された SSIS と同じ 行 2 orderdetail 列 , order_id=4 <- 以前に生成された SSIS と同じ

外部キーのIDを詳細に1にしたいので、XMLデータをインポートするときに参照整合性を維持するために見逃した中間ステップ/設定があると思います。

任意のポインタをいただければ幸いです。

4

2 に答える 2

0

私が提案するのは、通常どおりヘッダーをインポートし、IDENTITY を使用して内部の一意のキーを生成することです。SSIS によって生成されたキーも、この同じテーブルにインポートする必要があります。

ここで、詳細を個別のステージング テーブルにインポートし、SSIS によって生成されたキーを再び保持します。

ここで、元のヘッダー テーブルを使用して、SSIS によって生成されたキーから一意のキーにマップします。

これを行うには、ステージング テーブルの空白のフィールドを次のように更新します。

UPDATE LineStaging
SET Unique_Key = Header.UniqueKey
FROM Header 
WHERE Header.SSISKey = LineStaging.SSISKey

Unique_Key フィールドに正しい外部キーが含まれるようになりました。これらのステージングされたレコードを「実際の」行テーブルにコピーできます。

INSERT INTO Line SELECT * FROM LineStaging

SSIS でオンザフライでこれを行う方法はおそらくありますが、私は SQL メソッドを好みます。

于 2013-09-11T05:03:02.147 に答える