我的问题与this one非常相似,但适用于自适应服务器企业。我使用BCP将数据加载到数据库中。批量导入期间,不会执行外键约束检查。
导入数据后检查外键约束的最佳方法是什么?
答案 0 :(得分:2)
我不知道Sybase ASE中的任何命令与MSSQL alter table/check check constraint
类似。
关于如何强制检查FK约束的一些想法:
bcp
进入临时表,然后从登台表中选择插入目标表;这会引发错误但不一定告诉你哪一行未通过FK检查(除非你选择一次插入/选择一行)
使用当前值更新FK列; ASE不够聪明,知道前/后值是相同的,所以它会运行FK检查;再次,这将产生一个错误但不告诉你哪些行未通过FK检查;如果它确实通过并更新了一堆行(和相关的索引),它也不是非常有效;类似的东西:
update child_table set fk_col = fk_col
where ... for-the-child-rows-just-inserted ...
not exists
查询以查找未通过FK检查的行,例如:
select * from child c
where not exists(select 1 from parent p where p.pk = c.fk)
and ... for-the-child-rows-just-inserted ...