禁止/恢复数据库所有表的外键约束
今天做了一个归档数据的功能,把生产库部分符合条件的数据迁移到归档数据库中。其中有一部分是基础数据(人员,部门等)要原封不动的Copy过去。采取的做法是先把目标库的基础数据Delete,然后在把生产库的基础数据全部Copy过去。
但是问题来了:基础数据由于有其他的业务数据表跟它做了外键约束,所有Delete是失败的。
可以使用以下的语句解决该问题:
---禁止目标数据库所有表的外键约束,把数据都Copy完了在恢复
EXEC sp_MSforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL'
---恢复目标数据库所有表的外键约束
EXEC sp_MSforeachtable 'ALTER TABLE ? CHECK CONSTRAINT ALL'
但是目前还有一个问题,在生产库中执行以上语句由于权限问题,无法修改目标数据库的结构。暂时使用Job来处理,第一步先在目标数据库执行禁止外键,第二步开始归档数据,第三步在目标数据库执行恢复外键约束。
浙公网安备 33010602011771号