Если целевые таблицы были бы пустыми, вы могли бы использовать SET IDENTITY_INSERT ON - это позволило бы вставить исходные значения в столбцы идентификаторов, и вам не придется обновлять ссылочные идентификаторы. Конечно, если есть какие-либо существующие идентификаторы, которые могут перекрывать вставленные идентификаторы - это не решение.
Если имена в первых таблицах уникальны, вы можете создать отображение между новым и старым идентификаторами и выполнить обновление примерно так:
UPDATE S
SET S.id = F.id
FROM second S
INNER JOIN first_original FO ON FO.id = S.id
INNER JOIN first F ON F.name = FO.name
Если имена не являются уникальными, то исходные идентификаторы должны быть сохранены в «first» для обеспечения соответствия между старыми и новыми идентификаторами. Это может быть временный новый столбец, который может быть удален после обновления идентификаторов в "second".
Или, как сказал Рич Эндрюс, вы можете использовать @scope_identity, но в этом случае вам придется выполнять вставку одну за другой - объявить курсор на исходной таблице, вставить каждую запись, получить ее новый идентификатор и вставить ее во «вторую» таблица.