Sql server SQL大容量插入期间约束的控制行为?
我很好奇,在使用bulkinsert命令时,是否有方法控制数据库如何响应外键和主键约束。具体来说,我将数据插入到employees表(主键为empID)中,该表通过该键(empID)链接到其他表(子女、配偶等)中的数据。鉴于此应用程序背后的逻辑和用途,如果在批量插入期间发现重复的主键,我将执行以下操作:Sql server SQL大容量插入期间约束的控制行为?,sql-server,database,Sql Server,Database,我很好奇,在使用bulkinsert命令时,是否有方法控制数据库如何响应外键和主键约束。具体来说,我将数据插入到employees表(主键为empID)中,该表通过该键(empID)链接到其他表(子女、配偶等)中的数据。鉴于此应用程序背后的逻辑和用途,如果在批量插入期间发现重复的主键,我将执行以下操作: 删除(或更新)数据库中已存在的“employee”行 从与该员工(即子女、受益人等)关联的其他表中删除所有数据 插入新员工数据 如果我以通常的方式插入数据,也就是不进行批量插入,我认为任务将非常
非常感谢您的指导。这类问题的通常解决方案是将数据加载到一个Staging表中,可能在它自己的模式中,甚至数据库中。然后,您将从这个staging表加载实际的表,从而允许您以不受限制的方式执行所需的任何逻辑。这样做的另一个好处是,您可以在加载“real”表时记录/审核/检查正在使用的逻辑。如果插入可能违反主键,则不能使用大容量插入。唯一的选择是暂时忽略外键约束,这在这里还不够好。要么不使用大容量插入,要么对临时表进行大容量插入,然后从该表运行更复杂的
MERGE
查询。