在SQL Server中插入多个表

在SQL Server中插入多个表,sql,sql-server,Sql,Sql Server,如何一次插入下表 Table1 : table1id, name, table2id, detail Table2: table2id, type, table1id 我可以用下面的查询插入到表1中 insert into table1(table1id, name, table2id, detail) values (newID(), a, newID(), null); 但是如何将这些最近在表1中创建的新闻id插入表2中?直接输出到第二个表或可组合的dml中 create table T

如何一次插入下表

Table1 : table1id, name, table2id, detail
Table2: table2id, type, table1id
我可以用下面的查询插入到表1中

insert into table1(table1id, name, table2id, detail)
values
(newID(), a, newID(), null);

但是如何将这些最近在表1中创建的新闻id插入表2中?

直接输出到第二个表或可组合的dml中

create table Table1Test (
table1id uniqueidentifier, 
name varchar(100), 
table2id uniqueidentifier,
detail int)


create table Table2Test
(
table2id uniqueidentifier,
type varchar(100),
table1id uniqueidentifier
);
go

--output into 2nd table
insert into Table1Test(table1id, name, table2id, detail)
output inserted.table2id, '??', inserted.table1id into Table2Test(table2id, type, table1id)
select top 2000 newid(), name, newid(), abs(checksum(newid()))
from master.dbo.spt_values;

select *
from Table1Test as a
join Table2Test as b on a.table1id = b.table1id;
go

truncate table Table1Test;
truncate table Table2Test;
go

--composable dml
insert into Table2Test(table2id, type, table1id)
select table2id, type, table1id
from
(
insert into Table1Test(table1id, name, table2id, detail)
output inserted.table2id, '??' as type, inserted.table1id 
select top 2000 newid(), name, newid(), abs(checksum(newid()))
from master.dbo.spt_values
)as src;


select *
from Table1Test as a
join Table2Test as b on a.table1id = b.table1id;
go


drop table Table1Test;
drop table Table2Test;
go

您可以使用output子句来实现相同的功能

代码如下所示-

插入
进入表1(表1ID,名称)
输出已插入。tab1id,null
进入表2(表2ID,细节)
值(newID(),'a');
Insert有一个名为inserted的内存驻留表
Delete有一个名为deleted的内存驻留表
Update同时具有名为inserted和deleted的内存驻留表


您可以在insert、update、delete和merge语句中使用output子句。

在insert之后创建insert触发器insert在SQL语言中,insert仅对一个表有效。您可以使用触发器在相关表中插入行,也可以编写多个insert语句来插入要明确插入的行。插入的捕获值可以使用子句完成。两个表中都有外键,这是一种循环依赖关系。如果是一对一关系,那么在一个表中也应该只有外键。然后在第一个表中插入使用@SCOPE_IDENTITY来获取最近添加的键,并在其他插入中使用。