多行插入两个表,避免循环

时间:2013-04-25 09:31:22

标签: sql sybase

我有一组值必须插入两个表。输入有5行,我必须先将这5行插入表A中。表A有一个标识列。接下来我要插入这5个表B中的行带有一个额外的列,该列是表A中的标识。 如何使用任何循环完成此操作? 任何帮助都将非常有用。

INSERT INTO TABLE_A(COL2,COL3)
SELECT COL2,COL3 FROM #TEMP_TAB

set @identityval=@@identity 
INSERT INTO TABLE_B(COLA,COLB,COLC)
 SELECT @identityval,COL2,COL3,COL4 FROM #TEMP_TAB

3 个答案:

答案 0 :(得分:0)

您无法使用单个参数插入多个表格。

您可以做的是在表A上创建一个插入触发器,以便在插入发生后,执行新插入,并将值插入表A并将其插入表B中。

答案 1 :(得分:0)

这是一个解决方案。

从表TABLE_A中获取最大标识列 在表TABLE_A中插入新记录 然后在TABLE_B中从TABLE_B中插入记录,其标识大于最后一个最大标识。

谢谢, 戈帕尔

答案 2 :(得分:0)

你想做什么是不可能的。 您只能使用@@identity变量获取上一次插入的值。这样就可以添加到多个表来设置正确的外键而无需使用游标再次选择刚刚插入的行。一次插入多行时,此方法无用。

来自documentation: 使用@@ identity全局变量检索插入IDENTITY列的最后一个值。每次插入或选择尝试将行插入表时,@@ identity的值都会更改。

这是一个插入单行的过程,您可以使用返回值在另一个表中创建对插入数据的引用:

create procedure reset_id as
    set identity_insert sales_daily on
    insert into sales_daily (syb_identity, stor_id) 
         values (102, "1349")
    select @@identity
select @@identity

execute reset_id