1

我有一组值必须插入到两个表中。输入有 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
4

3 回答 3

0

这是一种解决方案。

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

谢谢,戈帕尔

于 2013-04-25T16:12:45.220 回答
0

您不能使用单个语句插入多个表。

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

于 2013-04-25T09:37:10.753 回答
0

你想做的事情是不可能的。您只能使用@@identity变量从最后一次插入中获取值。这样就可以添加到多个表中设置正确的外键,而无需使用游标再次选择刚刚插入的行。这种方法在一次插入多行时没有用。

文档中:使用 @@identity 全局变量检索插入 IDENTITY 列的最后一个值。每次 insert 或 select into 尝试将行插入表中时,@@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
于 2017-03-29T10:32:02.677 回答