我正在使用Sql Server Bulkinsert将一大堆数据从XML文件上传到数据库,通过在晚上静默运行的预定作业。
背景
考虑这个虚拟模型:
DiscreteColorKeyFrame
我的来源有望为我提供可靠的数据,但确实会出现错误/错误。 +====================+ +====================+
+ INVOICE + + INVOICE LINES +
+====================+ +====================+
+ PK + InvoiceId +-I-┐ + PK + InvoiceLineId +
+ + ... + └IX-+ FK + InvoiceId +
+ + ... + + + ... +
+====================+ +====================+
中的InvoiceId
FK可能会指向表Invoice Lines
中不存在的InvoiceId
。
我的问题
可以向Bulkinsert输入错误引用的数据会导致僵尸记录吗?
一旦再次打开约束,插入它们会导致(可记录)警告吗?
如果是这样,这些将是人类可检测到的。我可以创建一个上传后清理。上传前的检查非常复杂,如上所述,这不是我的责任。
PS
要清楚我对Zombie记录的意思:
存储在数据库中的记录,因为它们没有理由存在 通过外键引用依赖关系, 在另一个不存在的表中。
据我所知,这是一个普遍接受的术语。
答案 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