各テーブルの行を一致させるには、ある種の一意のキーが必要です。各テーブルに TempGuid 列を自由に追加しました (後で削除できます)。
-- Setup test data
declare @Table1 table (
Id int null
, Field1 int not null
, Field2 int not null
, TempGuid uniqueidentifier not null unique
)
insert into @Table1 (Field1, Field2, TempGuid) select 1, 2, newid()
insert into @Table1 (Field1, Field2, TempGuid) select 3, 4, newid()
declare @Table2 table (
Id int not null primary key identity(1, 1)
, Field1 int not null
, Field2 int not null
, TempGuid uniqueidentifier not null unique
)
-- Fill Table2
insert into @Table2 (Field1, Field2, TempGuid)
select Field1, Field2, TempGuid
from @Table1
-- Update Table1 with the identity values from Table2
update a
set a.Id = b.Id
from @Table1 a
join @Table2 b on a.TempGuid = b.TempGuid
-- Show results
select * from @Table1
Output
Table2 に挿入している Table1 に一意のキーが既にある場合は、実行可能です。ループまたはカーソルで一時的な一意のキー (おそらく GUID) を実行して、一度に 1 行ずつ処理することもできますが、それは私には悪いように思えます。
アップデート
テーブルで実行する実際の SQL は次のとおりです。
-- Add TempGuid columns
alter table Table1 add TempGuid uniqueidentifier null
update Table1 set TempGuid = newid()
alter table Table2 add TempGuid uniqueidentifier not null
-- Fill Table2
insert into Table2 (Field1, Field2, TempGuid)
select Field1, Field2, TempGuid
from Table1
-- Update Table1 with the identity values from Table2
update a
set a.Id = b.Id
from Table1 a
join Table2 b on a.TempGuid = b.TempGuid
-- Remove TempGuid columns
alter table Table1 drop column TempGuid
alter table Table2 drop column TempGuid