我有一個火鳥表是這樣的:如何更改Firebird上的CHECK約束?
CREATE TABLE events (
event VARCHAR(6) NOT NULL
CHECK (event IN ('deploy', 'revert', 'fail')),
change_id CHAR(40) NOT NULL,
change VARCHAR(512) NOT NULL
);
現在我需要另一個值添加到IN()
列表中CHECK約束。我怎麼做?
事情我試過到目前爲止:
在
RDB$TRIGGERS.RDB$TRIGGER_SOURCE
更新值:UPDATE RDB$TRIGGERS SET RDB$TRIGGER_SOURCE = 'CHECK (event IN (''deploy'', ''revert'', ''fail'', ''merge''))' WHERE RDB$TRIGGER_SOURCE = 'CHECK (event IN (''deploy'', ''revert'', ''fail''))';
似乎不起作用,因爲觸發器在
RDB$TRIGGERS.RDB$TRIGGER_BLR
編譯。創建一個新的檢查一個新的表,在複製數據,刪除舊錶,並重新命名新表。但是,它似乎是一個cannot rename a Firebird table,所以我不能讓新表具有與舊的名稱相同的名稱。
我懷疑更新RDB$TRIGGERS
是去(IDK!),如果我能得到火鳥重新編譯代碼的方式。但也許有更好的方法?
有沒有一種方法以編程方式得到約束名,做好傳入到一個文件這項工作'isql'? – theory
我想通過編程方式做到這一點,並將其發佈在單獨的答案中。 – theory