我的问题与此非常相似,但针对的是自适应服务器企业版。我使用 BCP 将数据加载到数据库中。在大容量导入期间,不执行外键约束检查。
导入数据后检查外键约束的最佳方法是什么?
我不知道Sybase ASE中有任何类似于MSSQLalter table/check check constraint
的命令。
关于如何强制检查 FK 约束的一些想法:
bcp
到临时表中,然后通过从临时表中进行选择插入到目标表中;这将引发错误,但不一定告诉您哪些行未通过 FK 检查(除非您选择一次插入/选择 1 行(使用当前值更新 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 ...