2016-12-16 2 views
2

Я мог бы использовать ваш опыт. У меня есть следующий код:Вставить в ... Объединить ... Выбрать (SQL Server)

INSERT INTO Table3 (Column2, Column3, Column4, Column5) 
SELECT null, 110, Table1.ID, Table2.Column2 
FROM Table1 
    JOIN Table1Table2Link on Table1.ID=Table1Table2Link.Column1 
    JOIN Table2 on Table1Table2Link.Column2=Table2.ID 

Теперь мне нужно взять Inserted.ID (Идентичность Table3, которая генерируется на вставке) и table2.id и вставить их в любой временной таблицы или табличной переменной. Обычно я бы использовал предложение OUTPUT, но OUTPUT не может получать данные из разных таблиц. Теперь я считаю, что это можно сделать с MERGE, но я не уверен, как это сделать. Мне нужно что-то вроде:

INSERT INTO Table3 (Column2, Column3, Column4, Column5) 
OUTPUT Inserted.ID, Table2.ID into @MyTableVar 
SELECT null, 110, Table1.ID, Table2.Column2 
FROM Table1 
    JOIN Table1Table2Link on Table1.ID=Table1Table2Link.Column1 
    JOIN Table2 on Table1Table2Link.Column2=Table2.ID 

Прошу прощения, если это дублирующий вопрос, но я ничего не нашел.

+0

Вам может понадобиться сделать это путем вставки значения, которые вы хотите вставить во временную таблицу, а затем с помощью 'OUTPUT', чтобы получить новое выходное значение. –

ответ

2

Хитрость заключается в заполнении таблицы оператором MERGE вместо INSERT...SELECT. Это сеточки вам использовать значение из двух вставленных и исходных данных в операторе вывода:

MERGE INTO Table3 USING 
(
    SELECT null as col2, 
      110 as col3, 
      Table1.ID as col4, 
      Table2.Column2 as col5, 
      Table2.Id as col6 
    FROM Table1 
    JOIN Table1Table2Link on Table1.ID=Table1Table2Link.Column1 
    JOIN Table2 on Table1Table2Link.Column2=Table2.ID 
) AS s ON 1 = 0 -- Always not matched 
WHEN NOT MATCHED THEN 
INSERT (Column2, Column3, Column4, Column5) 
VALUES (s.col2, s.col3, s.col4, s.col5) 
OUTPUT Inserted.ID, s.col6 
INTO @MyTableVar (insertedId, Table2Id); 
+0

Благодарим вас за помощь и быстрый ответ! –

+0

Никогда не знаю этого .. +1 –

+0

@Prdp: Я узнал об этом сам, только когда мне пришлось добавить несколько данных родительских детей. Возможно, вы найдете [мое решение этого] (http://stackoverflow.com/questions/38213008/t-sql-insert-data-into-parent-and-child-tables). –