我正在尝试从实时数据库建立一个导入到我们开发数据库的过程。
我尝试使用 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
按以下顺序导入
- 顾客
- 产品
- 命令
- 订单行
一个表中的外键是另一个表中的主键。例如:尝试插入没有订单(订单号)、产品(产品编号)的订单行将不起作用。
您也可以遵循@Nick Kavadias 的想法,但这可能会导致违反业务规则(尽管当您尝试重新启用约束时可以捕获到它)并产生孤立记录。