首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >返回插入中的源表列。输出..。选择查询

返回插入中的源表列。输出..。选择查询
EN

Stack Overflow用户
提问于 2022-03-17 13:37:35
回答 1查看 78关注 0票数 0

我希望在表之间复制数据,并构建旧的和新的主键的映射。我需要映射,以便稍后更新子表。

我想要的:

序言

代码语言:javascript
复制
create table T1(Id int IDENTITY(1,1) primary key, X int, Y int, Z int)
create table T2(Id int IDENTITY(1,1) primary key, X int, Y int, Z int)

create table C1(Id int IDENTITY(1,1) primary key, T1_Id int not null foreign key references T1(Id), A int) 
create table C2(Id int IDENTITY(1,1) primary key, T2_Id int not null foreign key references T2(Id), A int)

代码

代码语言:javascript
复制
declare @keyMapping table(oldId int, [newId] int)

insert into T2 (X, Y, Z)
output INSERTED.ID, T1.ID into @keyMapping
select X, Y, Z from T1;


insert into C2 (T2_Id, A)
select km.newId, C1.A from C1
join @keyMapping km on C1.T1_Id = km.oldId

不幸的是,这在The multi-part identifier "T1.ID" could not be bound.中失败了。

除了插入到输出中的值之外,还有选择其他内容的方法吗?还是有别的方法来做我想做的事?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-17 13:54:54

插入输出只能从要插入的表中输出列。合并也可以输出源表,例如

代码语言:javascript
复制
declare @keyMapping table(oldId int, [newId] int)

merge into T2 
using (select ID, X, Y, Z from T1) as src 
on 1=2
when not matched then insert (X,Y,Z) VALUES (src.X,src.Y,src.Z)
output inserted.ID, src.ID into @keyMapping(newId,oldId);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71513272

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档