2016-12-03 76 views
0

我有2個表,請檢查連接我們如何更新DB2中具有外鍵約束的列?

PK圖片:PK

FK:FK

的p_id在PK表的主鍵 和P_ID在FK表的外鍵。

我需要添加10至兩PK和FK表的p_id列中的所有記錄(這意味着它們總是匹配)

我知道MS SQL,我們可以如下輕鬆更新級聯:

ALTER TABLE FK 
ADD CONSTRAINT FK_P_Id 
FOREIGN KEY (P_Id) 
REFERENCES PK (P_Id) ON UPDATE CASCADE 

然後更新PK的行,它也會自動更新FK。

update A 
set A.P_Id= A.P_Id + 10 
from PK A inner join FK B 
on A.P_Id = B.P_Id 

但是,我不知道這是如何工作在DB2 ..有人可以請幫忙嗎?

我如何得到這個工作?

在此先感謝 斯瓦特

回答

2
--remove you foreign key 
ALTER TABLE YOURLIB.FK 
drop CONSTRAINT YOURLIB.FK_P_Id; 

--update FK table 
update YOURLIB.FK 
set P_Id=P_Id+10; 

--update PK table (force) 
update YOURLIB.PK overriding system value 
set P_Id=P_Id+10; 

--recreate foreign key 
ALTER TABLE YOURLIB.FK 
ADD CONSTRAINT YOURLIB.FK_P_Id 
FOREIGN KEY (P_Id) 
REFERENCES YOURLIB.PK (P_Id) 
ON DELETE RESTRICT; 

--If you id on PK is autoincremented, restart it (here 123456 in example but you must found max of id in your PK table --> select max(p_id) from yourlib.pk) 
ALTER TABLE YOURLIB.PK 
ALTER COLUMN P_Id 
RESTART with 123456; 
+0

謝謝,這個作品 – Swat

0

可以修改某個鍵來強制這樣的,只有當你更新不創建雙值鍵(例如你的鑰匙+ 10在表中已經存在),否則你必須刪除更新前的主鍵(危險,如果有人在桌子上工作,請小心)。好吧當然,你必須刪除外鍵用於做

update pk f0 overriding system value 
set f0.id=f0.id+10 
where exists 
(
    select * from fk f1 
    where f0.id=f1.id 
) 
+0

嗨 我不能刪除外鍵! 有什麼辦法可以級聯或觸發它嗎?就像我在SQL – Swat

+0

中保存你在fk表中的行一樣,刪除你的fk表中的行,更新你的表pk,更新你的保存,將你的保存插入你的fk表 – Esperento57

+0

你可以用查詢解釋嗎?即時消息新的db2 – Swat