FireBird添加删除约束

时间:2010-10-28 12:24:52

标签: sql firebird

在Firebird中我想生成用于在数据库中添加所有约束的脚本,并且我还想生成用于删除所有外键约束的脚本。

我该怎么做?

1 个答案:

答案 0 :(得分:2)

要生成一个脚本,该脚本依次删除所有外键,请在任何firebird> = 2.0中使用以下脚本(也许它适用于pre 2.0,只是不记得所涉及的系统表中是否更改了数据字典):

--generate a script which drops all foreign keys
--by jachguate http://jachguate.wordpress.com
--             http://stackoverflow.com/users/255257/jachguate
select 'alter table '||c.rdb$relation_name||' drop constraint '||c.rdb$constraint_name||';' script_lines
  from rdb$relation_constraints c
 where c.rdb$constraint_type = 'FOREIGN KEY';

修改

要生成脚本以重新创建所有外键,此脚本将执行此操作(对于firebird> = 2.0)。请记住在实际删除外键之前运行它。

select 'alter table '||trim(c.rdb$relation_name)
       ||' add constraint '||trim(c.rdb$constraint_name)
       ||' foreign key ('
       ||(select list(trim(imast.rdb$field_name)) from rdb$index_segments imast where rdb$index_name = c.rdb$index_name)
       ||') references '||trim(uqc.rdb$relation_name)
       ||' ('
       ||(select list(trim(idet.rdb$field_name)) from rdb$index_segments idet where rdb$index_name = uqc.rdb$index_name)
       ||');'
  from rdb$relation_constraints c
       inner join rdb$ref_constraints rc
          on rc.rdb$constraint_name = c.rdb$constraint_name
       inner join rdb$relation_constraints uqc
          on uqc.rdb$constraint_name = rc.rdb$const_name_uq;

最好的问候。