質問: 私が使用している`SqlBulkCopy`私の前のプログラムとそのの光速の利点楽しんできました`INSERTS` 。しかし、私は物事を1つのテーブルにだけ挿入していました。 私は今1対多の関係を持つ2つのテーブルを持っています`A`つまり、テーブル`A`はテーブル`B`外部キーを持っています。したがって、 `B`各レコードは、 `A`挿入の結果である*id*を保持します。 私はそこに解決策があるのだろうかと思っていますか? **例:** 私はこれについてより良い例を挙げ、最終的には良い解決策を見つけることを願っています。 *連絡先*という表があります。各連絡先には0個以上の電子メールアドレスを*割り当てる*ことができるため、 *ContactEmails*という別のテーブルにそれらの電子メールを格納します。したがって、 `Contacts.Id`は*ContactEmails*上で*FK*に*なります* ( `ContactEmails.ContactId` )。 1000件の*連絡先*を挿入したいとし、それぞれに0件以上の*メール*があるとしましょう。もちろん*、両方のテーブルに* `SqlBulkCopy`を使用したいと考えています。 問題は、私たちが彼/彼女の`Id`を知っている新しい連絡先を挿入するときだけであるということです。連絡先が挿入されると、私たちは挿入された`Id`が15であることを認識します。したがって、この連絡先に3つの電子メールを挿入し、3つすべてに`ContactEmails.ContactId`値15を`ContactEmails.ContactId`ます。ただし、連絡先がデータベースに挿入される前に。 すべての連絡先をまとめて表に挿入できます。しかし、電子メールに関しては、電子メールが自分の連絡先を知らないため、接続が失われます。
回答: バルク挿入の前に制約(外部キー)を無効にします。その後、再び有効にします。 参照整合性違反がないことを確認してください。 以下のクエリを使用して、FK制約とCHECK制約を無効にすることができます。 ``` ALTER TABLE foo NOCHECK CONSTRAINT ALL ``` または ``` ALTER TABLE foo NOCHECK CONSTRAINT CK_foo_column ``` 主キーと一意の制約を無効にすることはできませんが、正しく理解していればOKです。