Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.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_Sql Server_Tsql - Fatal编程技术网

Sql 我需要将插入表中的数据提取到两个表中

Sql 我需要将插入表中的数据提取到两个表中,sql,sql-server,tsql,Sql,Sql Server,Tsql,我需要提取插入到一个表中的数据,提取插入到上一个表中的数据,然后插入到另一个表中 create table tab1 (id bigint identity(1,1), col_1 varchar(4)) create table tab2 (id bigint identity(1,1), col_1 varchar(4), id_tab1 bigint) create table tab3 (id bigint identity(1,1), col_1 varchar(4), id_tab2

我需要提取插入到一个表中的数据,提取插入到上一个表中的数据,然后插入到另一个表中

create table tab1 (id bigint identity(1,1), col_1 varchar(4))
create table tab2 (id bigint identity(1,1), col_1 varchar(4), id_tab1 bigint)
create table tab3 (id bigint identity(1,1), col_1 varchar(4), id_tab2 bigint)
create table tab4 (id bigint identity(1,1), col_1 varchar(4), id_tab3 bigint)

insert into tab1 (col_1)
values ('AAAA'),('BBBB'),('CCCC')

insert into tab2 (col_1, id_tab1)
output inserted.col_1, inserted.id into tab3 (col_1, id_tab2)
--I NEED DO: OUTPUT FROM TAB3 INTO TAB4
output inserted.tab3.col_1, inserted.tab3.id into tab4 (col_1, id_tab3)
select col_1, id
from tab1

output
子句需要显式的
INSERT
。因此,请使用临时表:

declare @t2ids table (col_1 varchar(4), id_tab2 int);

insert into tab2 (col_1, id_tab1)
    output inserted.col_1, inserted.id into @t2ids (col_1, id_tab2);

declare @t3ids (col1 varchar(4), id_tab3);

insert into tab3 (col1, id_tab2)
    output inserted.col_1, inserted.id into @t3ids (col_1, id_tab3)
    select col_1, id_tab2
    from @t2ids;

insert into tab4 (col_1, id_tab3)
    select col_1, id_tab3
    from @t3ids;

您似乎试图实现一个-意味着插入到第一个表中会自动将默认值插入到相关表中,并从该表插入到下一个相关表中,依此类推(直到tab4)。
对于这样的事情,我将使用触发器而不是output子句—在每个表上创建一个insert触发器,将相关记录插入到下一个表中:

create trigger trg_tab2_insert on tab2 for insert
as
insert into tab3(col_1, id_tab2)
select col_1, id
from inserted
然后

create trigger trg_tab3_insert on tab3 for insert
as
insert into tab4(col_1, id_tab3)
select col_1, id
from inserted

请注意,要使其工作,应启用(这是SQL Server中的默认状态)

您不能将其作为一个脚本运行吗

例如script.sql:

insert into tab2 (col_1,id_tab1) select col_1,id from tab1
 insert into tab3 (col_1,id_tab2) select col_1,id from tab2
 insert into tab4 (col_1,id_tab3) select col_1,id from tab3

我不会动扳机我知道我可以这样做,但我愿意做任何事one@VirtualCom . . . 这回答了你的问题。这是你需要的吗?我想把所有的事情都做在一起。目前我一分为二。。