Sql server SQL大容量插入期间约束的控制行为?

Sql server SQL大容量插入期间约束的控制行为?,sql-server,database,Sql Server,Database,我很好奇,在使用bulkinsert命令时,是否有方法控制数据库如何响应外键和主键约束。具体来说,我将数据插入到employees表(主键为empID)中,该表通过该键(empID)链接到其他表(子女、配偶等)中的数据。鉴于此应用程序背后的逻辑和用途,如果在批量插入期间发现重复的主键,我将执行以下操作: 删除(或更新)数据库中已存在的“employee”行 从与该员工(即子女、受益人等)关联的其他表中删除所有数据 插入新员工数据 如果我以通常的方式插入数据,也就是不进行批量插入,我认为任务将非常

我很好奇,在使用bulkinsert命令时,是否有方法控制数据库如何响应外键和主键约束。具体来说,我将数据插入到employees表(主键为empID)中,该表通过该键(empID)链接到其他表(子女、配偶等)中的数据。鉴于此应用程序背后的逻辑和用途,如果在批量插入期间发现重复的主键,我将执行以下操作:

  • 删除(或更新)数据库中已存在的“employee”行
  • 从与该员工(即子女、受益人等)关联的其他表中删除所有数据
  • 插入新员工数据
  • 如果我以通常的方式插入数据,也就是不进行批量插入,我认为任务将非常简单。然而,我必须承认,在我使用它时,我不太确定如何处理这个问题

    我当然不希望有人为我编写代码,但我不太确定这是否可能,如何开始,或者最好的方法是什么。可能是存储过程,还是对模式的更改


    非常感谢您的指导。

    这类问题的通常解决方案是将数据加载到一个Staging表中,可能在它自己的模式中,甚至数据库中。然后,您将从这个staging表加载实际的表,从而允许您以不受限制的方式执行所需的任何逻辑。这样做的另一个好处是,您可以在加载“real”表时记录/审核/检查正在使用的逻辑。

    如果插入可能违反主键,则不能使用大容量插入。唯一的选择是暂时忽略外键约束,这在这里还不够好。要么不使用大容量插入,要么对临时表进行大容量插入,然后从该表运行更复杂的
    MERGE
    查询。