如何根据生成的插入索引键更新表?

时间:2014-06-18 19:39:08

标签: sql sql-server-2008

我创建了一个临时表,其中包含我需要插入到一组表中的大部分值。从这个临时表中我可以获得插入到第一个表所需的所有值,但是插入到下一个表中取决于插入到第一个表生成的标识密钥。

我可以在第一次插入后更新我的临时表,但我想尝试使用输出子句。

我想要这样的事情:

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>

2 个答案:

答案 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)

您可以mergetemptable导入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