bulkinsert可以导致僵尸记录吗?

时间:2016-08-01 09:42:58

标签: sql .net sql-server bulkinsert

我正在使用Sql Server Bulkinsert将一大堆数据从XML文件上传到数据库,通过在晚上静默运行的预定作业。

背景

考虑这个虚拟模型:

DiscreteColorKeyFrame

我的来源有望为我提供可靠的数据,但确实会出现错误/错误。 +====================+ +====================+ + INVOICE + + INVOICE LINES + +====================+ +====================+ + PK + InvoiceId +-I-┐ + PK + InvoiceLineId + + + ... + └IX-+ FK + InvoiceId + + + ... + + + ... + +====================+ +====================+ 中的InvoiceId FK可能会指向表Invoice Lines中不存在的InvoiceId

我的问题

  

可以向Bulkinsert输入错误引用的数据会导致僵尸记录吗?

一旦再次打开约束,插入它们会导致(可记录)警告吗?

如果是这样,这些将是人类可检测到的。我可以创建一个上传后清理。上传前的检查非常复杂,如上所述,这不是我的责任。

PS

要清楚我对Zombie记录的意思:

  

存储在数据库中的记录,因为它们没有理由存在   通过外键引用依赖关系,   在另一个不存在的表中。

据我所知,这是一个普遍接受的术语。

1 个答案:

答案 0 :(得分:1)

是的,如果未指定INVOICE LINES选项,则会导致INVOICE行引用不存在的CHECK_CONSTRAINTS(“zombie records”),如果未指定SELECT * FROM [INVOICE LINES] il WHERE NOT EXISTS ( SELECT 1 FROM INVOICE i WHERE i.InvoiceId =il.InvoiceId ) ; 选项

  

CHECK_CONSTRAINTS指定目标表上的所有约束   必须在批量导入操作期间检查或查看视图。没有   CHECK_CONSTRAINTS选项,任何CHECK和FOREIGN KEY约束   忽略,并在操作后,对表的约束是   标记为不信任。

https://msdn.microsoft.com/en-us/library/ms188365.aspx

您可以使用后加载查询检测错误的行

url