2012-08-09 32 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