クライアント/親関係のSQL Bulkcopy

.net sqlbulkcopy sql-server

質問

数百万行のクライアント/親関係を持つ.NETアプリケーション内に2つのDataTableがあります。このデータは、SQL BulkCopyを介してSQL Serverデータベースに挿入する必要があります。この.NETアプリケーションの複数のインスタンスが、同じテーブルに異なるデータを並行して実行する可能性があります。

主キーの自動生成親テーブルにID列があります。

問題は、対応する外部キーを子テーブルに挿入する方法がわからないことです。

誰もバルクコピーを使ってこの1:N関係の問題を解決する方法を知っていますか?複数のインスタンスが実行される可能性があるため、.NETでIDを作成することはできません。

ありがとうダニエル

受け入れられた回答

これは、IDENTITY以上の自然キーをすべての主キーに使用する方が好きな理由の1つに過ぎません。

どの子供がデータソースのどの親に行くのかをどのように知っていますか?それらが列でリンクされている場合は、あまりにも困難ではありません。親行を挿入し、ステージング表に子行を挿入し、その列の親に参加している間に子行を挿入してIDを取得します。

関係が単にファイル内の相対位置またはそれに類似している場合、それはより困難になります。ファイル行#を含めることができますし、上の同じ手順を使用してそれらに参加します(child.line_num> parent.line_numと他のparent.line_numはそれらの2つの数字の間にありません)。ループを作成してIDを取得し、そのIDを使用してすべての子を挿入します。 SSISでこれを問題にすることなく設定できますが、遅くなることがあります。

あなたの問題(データソースなど)の詳細については、より詳細な情報を提供することができます。


人気のある回答

あなたのデータがどこにあるのかは分かりませんが、これが私がこれにアプローチする方法です。

  1. 1つまたは複数の中間フラットファイルを使用します。
  2. データを平坦化し、主キーを割り当てます。
  3. 親テーブルのidentity insertを有効にidentity insert (スキップ自動インクリメントを意味する)
  4. 一括コピーではなく、SSISを使用してデータベースをロードします。


ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ