批量导入后检查约束



我的问题与此非常相似,但针对的是自适应服务器企业版。我使用 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 ...

最新更新