我在之前的程序中使用了SqlBulkCopy
并且享受了INSERTS
的光速优势。但后来,我只在一张桌子上插入东西。
我现在有两个具有一对多关联的表,即表A
在表B
中有一个外键。因此,B
中的每条记录都带有 id ,这是A
中插入的结果。
我想知道是否有解决方案吗?
示例:
我将就此提供一个更好的例子,并希望我们最终找到一个好的解决方案。
我们有一个名为 Contacts 的表格。由于每个联系人都可以有零个或多个电子邮件地址,我们会将这些电子邮件存储在名为 ContactEmails 的单独表中。因此Contacts.Id
将在 ContactEmails 上成为 FK (例如ContactEmails.ContactId
)。
假设我们要插入1000个通讯录,每个 。我们当然希望将SqlBulkCopy
用于两个表。
问题是,只有当我们插入一个我们认识他/她Id
的新联系人时。插入联系人后,我们知道插入的Id
例如是15.因此,我们为此联系人插入3封电子邮件,所有三封邮件的值均为ContactEmails.ContactId
。但在将联系人插入数据库之前,我们不知道15。
我们可以将所有联系人作为批量插入到表格中。但是当涉及到他们的电子邮件时,连接会丢失,因为电子邮件不知道他们自己的联系人。
答案 0 :(得分:0)
批量插入前禁用约束(外键)。然后再次启用它。
确保您没有参照完整性违规行为。
您可以使用以下查询禁用FK和CHECK约束:
ALTER TABLE foo NOCHECK CONSTRAINT ALL
或
ALTER TABLE foo NOCHECK CONSTRAINT CK_foo_column
无法禁用主键和唯一约束,但如果我理解正确,这应该没问题。