Sql server 如何在同一个查询中插入两个表,并同时使用一个目标表的标识?

Sql server 如何在同一个查询中插入两个表,并同时使用一个目标表的标识?,sql-server,Sql Server,我有一个包含50列的源表和两个分别包含25列的目标表 源表A 目的地表B和C 表B具有作为主键的标识。我需要在表B中插入前25列,获取主键的值,并使用此主键值在表C中插入其余的值 如果是单次插入,而不是批量插入,那就很容易了。例如: insert into b(c2,c3,c4) select c2,c3,c4 from a (Now i need to pick the id from b) insert into c select id,c5,c6,c7 from a 行需要匹配 我是SQ

我有一个包含50列的源表和两个分别包含25列的目标表

源表A
目的地表B和C

表B具有作为主键的标识。我需要在表B中插入前25列,获取主键的值,并使用此主键值在表C中插入其余的值

如果是单次插入,而不是批量插入,那就很容易了。例如:

insert into b(c2,c3,c4)
select c2,c3,c4 from a
(Now i need to pick the id from b)
insert into c
select id,c5,c6,c7 from a
行需要匹配

我是SQL的新手。抱歉,如果有不好的示例。

IDENT_CURRENT('您的B表名称')
它将获得B表的最后一个主键

使用
合并
输出

CREATE TABLE A(x INT, y int, z int)
CREATE TABLE B(x INT, y int, z int)
CREATE TABLE C(x INT, y int, z int)
GO

INSERT INTO A VALUES(1, 1, 1), (2, 2, 2)

MERGE INTO B dest
USING(SELECT * FROM A) src ON dest.x = src.x
WHEN NOT MATCHED BY TARGET THEN
INSERT VALUES (src.x, src.y, src.z)

OUTPUT Inserted.x, Inserted.y, Inserted.z INTO C;

SELECT * FROM A
SELECT * FROM B
SELECT * FROM C
输出:

A
x   y   z
1   1   1
2   2   2

B
x   y   z
1   1   1
2   2   2

C
x   y   z
1   1   1
2   2   2

当在
B
中插入多个值时,您将拥有多个
ID
。您将使用哪个ID插入表
C
,所以它应该是这样工作的。插入第一行。身份证是从那里取的。其余列连同此id一起插入后一个表中。我可以连接ID上的两个表并检索包含50列的完整行。您的语句完全不清楚。可以添加示例数据和预期输出那么您是插入多行还是插入单行?insert上没有where子句,因此看起来您正在尝试插入从表a到表b和表c的所有内容?我将在第一个
insert INTO b
中使用
OUTPUT
子句来生成
id
。另外,原始表
A
每行应该有一些
id
。使用
OUTPUT
子句,您应该能够拥有一个中间表,其中每行都有一个
ID
from table
A
和一个新的
ID
from table
B
。我会将
OUTPUT
子句的这些结果保存到一个表变量中。然后,您可以使用这些结果连接回原始表
A
,并将数据插入表
C
。如果您编辑您的问题并添加表模式的简化示例,您将得到许多详细的答案。