Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 多行插入到两个表中,避免循环_Sql_Sybase - Fatal编程技术网

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

Sql 多行插入到两个表中,避免循环,sql,sybase,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

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

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

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

这里有一个解决方案

从表A中获取标识列的最大值
在表A中插入新记录
然后在表_A的表_B上插入标识大于上次最大标识的记录

谢谢,
Gopal

您想做的事情是不可能的。 使用
@@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

你能给我们看看你到目前为止提出的SQL吗?我不想一下子插入。我也不能使用触发器,因为这不会一直发生。这是一种特殊情况。