将一个值范围从一列更新为另一个表上另一列的特定值范围

时间:2017-08-10 14:23:52

标签: sql-server database

我有两个非常不同的表,并且没有列,它们可以内部连接

我想一个接一个地对两者进行插入操作,但是第二个表的一列需要有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

1 个答案:

答案 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