禁止/恢复数据库所有表的外键约束

  今天做了一个归档数据的功能,把生产库部分符合条件的数据迁移到归档数据库中。其中有一部分是基础数据(人员,部门等)要原封不动的Copy过去。采取的做法是先把目标库的基础数据Delete,然后在把生产库的基础数据全部Copy过去。

  但是问题来了:基础数据由于有其他的业务数据表跟它做了外键约束,所有Delete是失败的。

  可以使用以下的语句解决该问题:

  ---禁止目标数据库所有表的外键约束,把数据都Copy完了在恢复
  EXEC sp_MSforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL'

  ---恢复目标数据库所有表的外键约束
  EXEC sp_MSforeachtable 'ALTER TABLE ? CHECK CONSTRAINT ALL'

 

  但是目前还有一个问题,在生产库中执行以上语句由于权限问题,无法修改目标数据库的结构。暂时使用Job来处理,第一步先在目标数据库执行禁止外键,第二步开始归档数据,第三步在目标数据库执行恢复外键约束。

posted on 2010-06-07 11:56  宇哲  阅读(225)  评论(0)    收藏  举报

导航