2013-03-20 98 views
1

我必須讓兩個插入到這樣的:INSERT INTO後插入與autonumeric

INSERT INTO CONVERSATION (issue,...) VALUES ('Presentation',...); 
INSERT INTO CONVERSATIONMESSAGES VALUES (ConversationId, 'Hello everybody',...); 

在第一個表中唯一的PK是autonumeric場(的conversationId),後來我知道這個autonumeric場插入到第二個表中。

有沒有辦法做到這一點?就像做一個選擇*當我做第一個插入知道它的第二個插入?

非常感謝,我希望我解釋正確。

回答

6

你可以使用LAST_INSERT_ID()插入產生最後在桌子上自動遞增,如

INSERT INTO CONVERSATION (issue,...) VALUES ('Presentation',...); 
INSERT INTO CONVERSATIONMESSAGES VALUES (LAST_INSERT_ID(), 'Hello everybody',..); 

但如果你有併發INSERT s此有時會失敗。

嘗試爲這個存儲過程,

DELIMITER $$ 
CREATE PROCEDURE ProcNAME(...PARAMETERS HERE...) 
BEGIN 
    INSERT INTO CONVERSATION (issue,...) VALUES ('Presentation',...); 
    SET @lstID = (SELECT MAX(ConversationId) FROM CONVERSATION); 
    INSERT INTO CONVERSATIONMESSAGES VALUES (@lstID, 'Hello..',..); 
END 
DELIMITER ; 
+1

它的工作原理可以使用,非常感謝你的你的幫助!!! – carlosdiazp 2013-03-20 07:45:31

+0

不客氣':D' – 2013-03-20 07:45:59

0
declare @retVal as int 

INSERT INTO CONVERSATION (issue,...) VALUES ('Presentation',...); 

@retval=SELECT SCOPE_IDENTITY(); 

INSERT INTO CONVERSATIONMESSAGES VALUES (ConversationId, 'Hello everybody',...); 

你會得到@revVal最後插入的行數字小值在其它表

+0

謝謝,但我會用LAST_INSERT_ID()。 – carlosdiazp 2013-03-20 07:46:48