2012-08-09 75 views
1

我有一個工作INSERT INTO SELECT查詢,它根據select的結果將記錄插入到一​​個新表中。簡單。INSERT INTO SELECT如何返回一組插入Ids

INSERT INTO my_table (a, b, c) 
SELECT a, b, c FROM my_table 
WHERE x=y; 

我如何得到這個查詢,以便我可以用它們來更新另一個表的INSERT部分新建的主鍵的ID? (主鍵是唯一唯一的參考)

我讀過INSERT INTO SELECT只支持在每個查詢中插入一個表,所以這是不可能的。這怎麼實現(使用MyISAM引擎)?

+0

創建一個存儲過程並插入單獨使用循環記錄,所以,這將是很容易得到最後插入的ID。存儲此ID並返回 – sandeep 2012-08-09 12:33:53

+0

是的,我想這是明顯的解決方案。但是,如果可能的話,我寧願犧牲解決方案的性能和更乾淨的代碼。 – nonshatter 2012-08-09 12:36:36

回答

0

您可以在臨時表中選擇您的數據,然後在運行光標同時插入行ü就會有PK

 DECLARE @tempTable TABLE(
    a VARCHAR(MAX), 
    b VARCHAR(MAX), 
    c VARCHAR(MAX) 
    ) 

    INSERT INTO @tempTable(a,b,c) 
    SELECT a,b,c FROM my_table WHERE x=y 

DECALRE @a DATATYPE; 
Declare @b DATATYPE; 
Declare @c DATATYPE; 

DECLARE cursor CURSOR FOR 
    SELECT * FROM @tempTable 

OPEN cursor 

FETCH NEXT FROM PropertyCursor INTO @a, @b,@c 
WHILE (@@FETCH_STATUS = 0) 
BEGIN 
INSERT INTO my_table(a,b,c) 
VALUES(@a,@b,@c) 
DECALRE @PrimaryKey INT = SCOPE_IDENTITY();//THis line will give u the PK so u can work with it and then below move to next row 
FETCH NEXT FROM cursor INTO @a, @b,@c 
END 

CLOSE cursor 
DEALLOCATE cursor 
+0

Apurav,你能更具體一點嗎?因此,假設我將SELECT的結果放入臨時表中,這將如何產生主鍵? – nonshatter 2012-08-09 12:45:26

+0

看到我的編輯,在你插入u之後,你將有一個局部變量來保存生成的PrimaryKey,以處理它。也爲你的變量使用正確的數據類型。 – Apurav 2012-08-09 13:31:30