1

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

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

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

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

ありがとうダニエル

4

2 に答える 2

0

あなたのデータがどこにあるかはわかりませんが、これが私がこれに取り組む方法です。

  1. 1つ以上の中間フラットファイルを使用します。
  2. データをフラット化し、主キーを割り当てます。
  3. 親テーブルを有効identity insertにします(自動インクリメントをスキップすることを意味します)
  4. 一括コピーではなく、SSISを使用してデータベースをロードします。
于 2009-12-02T18:01:00.797 に答える
0

これは、すべての主キーにIDENTITYよりも自然キーを使用することを好む多くの理由の1つにすぎません。

どの子がデータソースのどの親に行くのかをどうやって知るのですか?それらがそこの列によってリンクされている場合、それはそれほど難しいことではないはずです。親行を挿入し、子行をステージングテーブルに挿入してから、その列の親に結合しながら子行を挿入してIDを取得します。

関係が単にファイル内の相対的な位置またはそれに類似したものによるものである場合、それはより困難になります。ファイルの行番号を含めてから、上記と同じ手順を使用してそれらを結合するか(child.line_num> parent.line_numで、他のparent.line_numはこれら2つの数値の間にありません)、親を一度に1つずつインポートできます。ループし、IDをキャプチャしてから、そのIDを使用してそのすべての子を挿入します。これはSSISでそれほど問題なく設定できますが、時間がかかる場合があります。

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

于 2009-12-02T16:06:05.927 に答える