Sql server 如何在同一个查询中插入两个表,并同时使用一个目标表的标识?
我有一个包含50列的源表和两个分别包含25列的目标表 源表ASql 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
目的地表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 tableA
和一个新的ID
from tableB
。我会将OUTPUT
子句的这些结果保存到一个表变量中。然后,您可以使用这些结果连接回原始表A
,并将数据插入表C
。如果您编辑您的问题并添加表模式的简化示例,您将得到许多详细的答案。