SqlBulkCopy用于具有一对多关联的两个表

时间:2015-08-27 09:43:05

标签: c# sql-server one-to-many bulkinsert sqlbulkcopy

我在之前的程序中使用了SqlBulkCopy并且享受了INSERTS的光速优势。但后来,我只在一张桌子上插入东西。

我现在有两个具有一对多关联的表,即表A在表B中有一个外键。因此,B中的每条记录都带有 id ,这是A中插入的结果。

我想知道是否有解决方案吗?

示例:

我将就此提供一个更好的例子,并希望我们最终找到一个好的解决方案。

我们有一个名为 Contacts 的表格。由于每个联系人都可以有零个或多个电子邮件地址,我们会将这些电子邮件存储在名为 ContactEmails 的单独表中。因此Contacts.Id将在 ContactEmails 上成为 FK (例如ContactEmails.ContactId)。

假设我们要插入1000个通讯录,每个 。我们当然希望将SqlBulkCopy 用于两个表

问题是,只有当我们插入一个我们认识他/她Id的新联系人时。插入联系人后,我们知道插入的Id例如是15.因此,我们为此联系人插入3封电子邮件,所有三封邮件的值均为ContactEmails.ContactId。但在将联系人插入数据库之前,我们不知道15。

我们可以将所有联系人作为批量插入到表格中。但是当涉及到他们的电子邮件时,连接会丢失,因为电子邮件不知道他们自己的联系人。

1 个答案:

答案 0 :(得分:0)

批量插入前禁用约束(外键)。然后再次启用它。

确保您没有参照完整性违规行为。

您可以使用以下查询禁用FK和CHECK约束:

ALTER TABLE foo NOCHECK CONSTRAINT ALL

ALTER TABLE foo NOCHECK CONSTRAINT CK_foo_column

无法禁用主键和唯一约束,但如果我理解正确,这应该没问题。