2016-06-03 4 views
0

У меня есть таблицы с переменнойСписок вставленной ID в SQL Server

@temp (tmpId, c1, c2, c3, d1, d2, d3) 

Я хочу, чтобы вставить строки из @temp в таблицу (MyTable), имеющий столбец идентификаторов называется ID и присвоить isnerted идентификаторы строк в @temp. Я знаю, что список вставленных идентификаторов можно получить с помощью предложения OUTPUT.

INSERT INTO MyTABLE (c1, c2, c3) 
OUTPUT INSERTED.id, INSERTED.c1, ... INTO @IDs (id, c1, ...) 
SELECT (c1, c2, c3) 

Dispite, имеющий @IDs таблицу я не могу assigne вставленные идентификаторы к tmpIds, так как с1, с2, с3 столбцы не являются уникальными. Мне нужны идентификаторы для вставки столбцов d1, d2, d3 в другую таблицу. У меня есть только одно решение. Вставка строк по одному и получение идентификатора с помощью SCOPE_IDENTITY(). Но я хотел бы использовать цикл aviod. Любая идея, как вставить эти строки за один шаг?

+0

У вас есть первичный ключ/ограничение уникальности, определенное на 'c1, c2, c3' колоннах один @temp? Вы использовали тип табличного значения для объявления этой переменной, использовали ли вы следующий синтаксис 'DECLARE @temp TABLE (...)'? –

ответ

0

Попробуйте объединить трюк с привязкой исходных строк со вставленными значениями идентичностей:

merge MyTABLE t 
using @temp s 
on 1=0 
when not mathed then 
insert ... 
output inserted.ID, s.tempID 
into @linked_ids(id1, id2); 
+0

Спасибо! Это прекрасно работает! –

Смежные вопросы