批量导入后检查约束

时间:2017-07-17 12:03:30

标签: sybase sybase-ase

我的问题与this one非常相似,但适用于自适应服务器企业。我使用BCP将数据加载到数据库中。批量导入期间,不会执行外键约束检查。

导入数据后检查外键约束的最佳方法是什么?

1 个答案:

答案 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 ...