我创建了一个临时表,其中包含我需要插入到一组表中的大部分值。从这个临时表中我可以获得插入到第一个表所需的所有值,但是插入到下一个表中取决于插入到第一个表生成的标识密钥。
我可以在第一次插入后更新我的临时表,但我想尝试使用输出子句。
我想要这样的事情:
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>
答案 0 :(得分:1)
我认为你最好创建另一个临时表(OR)表类型变量并从那里开始,如下所示。因为我认为您不能使用output
子句从插入位置更新相同的临时表。
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
答案 1 :(得分:0)
您可以merge
将temptable
导入Table1
,并将结果输出到变量表,然后将加入变量表的原始数据插入Table2
。< / p>
示例:
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