Используйте предложение OUTPUT и временную таблицу.
Информация об условии OUTPUT находится здесь: http://msdn.microsoft.com/en-us/library/ms177564.aspx
Это должно выглядеть следующим образом:
CREATE TABLE #NewIDs (Tbl1Col1 INT, Tbl2ID INT)
insert into tbl2 (col1, col2)
OUTPUT inserted.col1, inserted.id INTO #NewIDs (Tbl1Col1, Tbl2ID)
select col1, col2
from tbl1
where tbl1.tbl2id is null
UPDATE t
SET t.tbl2id = tmp.Tbl2ID
FROM Tbl1 t
INNER JOIN #NewIDs tmp
ON tmp.Tbl1Col1 = t.Col1
Настоящий трюкгарантирует, что одно из полей, которые вы вставляете в Таблицу 2 из Таблицы 2, может быть использовано для ПРИСОЕДИНЕНИЯ, поэтому мы надеемся, что оно уникально или достаточно уникально.Единственное реальное осложнение состоит в том, что идентификатор для таблицы 1 не является частью запроса, выполняющего операцию INSERT, поэтому он не доступен для предложения OUTPUT.