当使用外键约束时,如何使用 SQL Servers SSIS 导入数据?

当使用外键约束时,如何使用 SQL Servers SSIS 导入数据?

我正在尝试从实时数据库建立一个导入到我们开发数据库的过程。

我尝试使用 SSIS 执行此操作,但由于限制,导入失败。

例如我有下表:

  • 顾客
  • 产品
  • 订单行
  • 命令

导入客户和产品没有问题,因为它们不依赖任何东西。但是导入订单行时会失败,因为订单尚未创建。

如何更改 SSIS 导入表的顺序?

或者也许我不应该使用外键约束?

答案1

在数据导入之前禁用或删除外键约束,然后在导入之后启用或添加它们,例如。 移除/添加

--drop
alter table t1  DROP CONSTRAINT fk_1
--add
alter table t1 WITH CHECK add constraint fk_1 foreign key (fk)
references t2 (i)

禁用启用

--disable
alter table t1 NOCHECK CONSTRAINT fk_1
--enable
alter table t1 WITH CHECK CHECK CONSTRAINT fk_1 

WITH CHECK 很重要,否则 SQL Server 将不会检查数据并且不信任数据

答案2

  1. 按以下顺序导入

    1. 顾客
    2. 产品
    3. 命令
    4. 订单行

一个表中的外键是另一个表中的主键。例如:尝试插入没有订单(订单号)、产品(产品编号)的订单行将不起作用。

您也可以遵循@Nick Kavadias 的想法,但这可能会导致违反业务规则(尽管当您尝试重新启用约束时可以捕获到它)并产生孤立记录。

相关内容