2011-08-10 47 views
0

我需要將2條記錄插入到2個不同的表格中。問題是這兩個記錄將具有相同的ID。 例如:我需要在不同表格中插入2條記錄,

我有我的Mannto表,其IdMan和oters字段。我也有我的服務表,其IdServ。

我能做些什麼來使這個平等?我正在使用Postgre。在Mannto表的ID是串行的,我需要使用一個作爲服務表的外鍵

我嘗試以下,但它不工作:

Insert into Mannto (idMan, field 1 field2 ...etc) 
      values (default, 'f1', 'f2'...etc) 

Insert into Service (idServ, fkMannto, field1...etc) 
      values (default, (in this part I need the same ManntoId called idMan), 'f1') 

感謝您的幫助你可以提供!

回答

0

也許它不是最好的解決辦法,但你可以使用觸發器。

CREATE TRIGGER MannToTrigger 
AFTER INSERT OR UPDATE OR DELETE ON MannTo 
    FOR EACH ROW EXECUTE PROCEDURE insertService(); 

獲取您的MannTo插入最後一個代碼並在每次插入後拋出過程。

+0

我試過的,但有一些問題,但非常感謝反正:)回答 – Jeil

1

當現場idMan使用序列來創建一個新的價值,你可以使用CURRVAL()指該值在接下來的INSERT:

BEGIN; -- start transaction 
     INSERT INTO Mannto (idMan, field 1 field2 ...etc) 
     VALUES (default, 'f1', 'f2'...etc); 
     INSERT INTO Service (idServ, fkMannto, field1...etc) 
     VALUES (default, currval('name_of_the_sequence') , 'f1'); 
COMMIT; -- commit both inserts 
+0

OMG MEN YOU YOU REEES !!!非常感謝,它非常完美!和:)再次感謝你! – Jeil

+0

和刪除應該是一樣的嗎? BEGIN; DELETE FROM servicio WHERE pkmantenimiento =?; DELETE FROM mantenimiento WHERE idmantenimiento = CURRVAL('name_of_the_sequence'); COMMIT; – Jeil

+0

不,那不行。也不需要,只需在idmantenimiento上創建一個外鍵,當刪除表servicio中的記錄時,引用pkmantenimiento和mantenimeinte中的DELETE將由數據庫自動完成。 –

相關問題