2010-10-28 78 views
1

在Firebird中我想生成用於添加數據庫中所有約束的腳本,並且還希望生成用於刪除所有外鍵約束的腳本。FireBird添加丟棄約束

我該怎麼做?

回答

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'; 

編輯

要生成一個腳本來重新創建所有的外鍵,這個腳本會做的伎倆(對於火鳥> = 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; 

此致敬禮。

+0

添加約束意味着添加那些被刪除的約束。 – user490079 2010-11-01 04:18:24

+0

我的答案已更新爲包含重新創建外鍵的腳本。 (_這是丟棄_) – jachguate 2010-11-02 23:57:24