#sql #sql-server-2008
#sql #sql-server-2008
Вопрос:
Я создал временную таблицу с большинством значений, которые мне нужно вставить в набор таблиц. Из этой временной таблицы у меня есть все значения, которые мне нужны для вставки в первую таблицу, но вставка в следующую таблицу зависит от идентификационного ключа, сгенерированного вставкой в первую таблицу.
Я вполне мог бы просто обновить свою временную таблицу после первой вставки, но я хотел бы попробовать использовать предложение output .
Я хочу что-то вроде этого:
INSERT INTO Table1
<values from temp table>
OUTPUT <update my temp table with generated identity keys>
INSERT INTO Table2
<values from temp table including the output updated id column>
Комментарии:
1. вы всегда можете запросить основную таблицу с помощью max(id), выполнить итерацию по единице и установить ее в качестве переменной для последующего использования.
Ответ №1:
Я думаю, вам лучше создать другую временную таблицу (ИЛИ) переменную табличного типа и перейти оттуда, как показано ниже. Потому что я не думаю, что вы можете обновить ту же временную таблицу, из которой вы вставляете output
предложение using .
CREATE TABLE TestTable (ID INT not null identity primary key,
TEXTVal VARCHAR(100))
create TABLE #tmp(ID INT, TEXTVal VARCHAR(100))
create TABLE #tmp1(ID INT, TEXTVal VARCHAR(100))
CREATE TABLE TestTable1 (ID INT not null, TEXTVal VARCHAR(100))
INSERT #tmp (ID, TEXTVal)
VALUES (1,'FirstVal')
INSERT #tmp (ID, TEXTVal)
VALUES (2,'SecondVal')
INSERT INTO TestTable (TEXTVal)
OUTPUT Inserted.ID, Inserted.TEXTVal INTO #tmp1
select TEXTVal from #tmp
INSERT INTO TestTable1 (ID, TEXTVal)
select ID, TEXTVal from #tmp1
Ответ №2:
Вы могли merge
temptable
бы ввести Table1
и вывести результаты в таблицу переменных, а затем вставить исходные данные, соединенные с таблицей переменных Table2
.
Пример:
DECLARE @MyIDs TABLE (TempTableID int NOT NULL, Table1ID int NOT NULL)
MERGE INTO Table1
USING TempTable AS Tmp
ON Table1.SomeValue = Tmp.SomeValue
WHEN NOT MATCHED THEN
INSERT (col1, col2, col3, col4, col5)
VALUES (tmp.col1, tmp.col2, tmp.col3, tmp.col4, tmp.col5)
OUTPUT Tmp.ID
,Table1.ID
INTO @MyIDs;
INSERT INTO Table2 (col1, col2, col3, col4, col5, Table1ID)
SELECT tmp.col1, tmp.col2, tmp.col3, tmp.col4, tmp.col5, new.Table1ID
FROM TempTable tmp
JOIN @MyIDs new ON tmp.ID = new.TempTableID