我有两个非常不同的表,并且没有列,它们可以内部连接。
我想一个接一个地对两者进行插入操作,但是第二个表的一列需要有ID(两个表都有一个" ID"列是IDENTITY )第一个表的新插入行的值。
我能够提出的唯一解决方案是使用游标或创建两个临时表作为中介并将其删除。
我想知道是否有更聪明的解决方案。
示例数据:
Table1
ID Name Email
1 John john@aol.com
2 Mary mary@aol.com
3 Sue sue@aol.com
4 John john@aol.com
5 Jim jim@aol.com
6 Chris chris@aol.com
Table2
ID Table1ID Job
1 4 Manager
2 5 Printer
3 6 Dev
必须做的是插入数据:
Bob bob@aol.com
Amy amy@aol.com
Tom tom@aol.com
进入表1,而数据
TeamLead
Manager
Dev
将与Table1 ID一起插入到表2中,这些ID将为Bob,Amy和Tom记录创建。即" 7,8,9和#34;。
预期结果:
Table1
ID Name Email
1 John john@aol.com
2 Mary mary@aol.com
3 Sue sue@aol.com
4 John john@aol.com
5 Jim jim@aol.com
6 Chris chris@aol.com
7 Bob bob@aol.com
8 Amy amy@aol.com
9 Tom tom@aol.com
Table2
ID Table1ID Job
1 4 Manager
2 5 Printer
3 6 Dev
4 7 TeamLead
5 8 Manager
6 9 Dev
答案 0 :(得分:1)
您可以在插入期间使用output
子句来捕获刚刚插入的标识值。我不知道您的数据是什么样的,但也许这会为您提供适应您的方案的工具
-- Table with identities you want to capture
if object_id('tempdb.dbo.#TableWithId') is not null drop table #TableWithId
create table #TableWithId
(
ID int identity(1,1) primary key clustered,
SomeData varchar(36)
)
if object_id('tempdb.dbo.#OtherTable') is not null drop table #OtherTable
create table #OtherTable
(
ID int,
SomeData varchar(36)
)
-- Output the inserted data including newly created identity fields directly into another table
insert into #TableWithId
(
SomeData
)
output
inserted.ID,
inserted.SomeData
into #OtherTable
(
ID,
SomeData
)
-- Fake source data
select top 1000 newid()
from sys.objects