使用INSERTED的SQL Server插入语句来获取新ID和现有ID

Ste*_*eve 5 sql-server identity insert

我正在将记录从一个sql server db插入另一个.我需要获取新插入的id并更新源表上的字段.我可以通过INSERTED选项获取新ID没问题.但是,我似乎无法从源表中获取ID.目标表没有源ID的字段.源表是转换表,我不想用转换字段污染目标表.这可能是不可能的,但我想我先和你们一起检查一下.

drop table #Table1
CREATE TABLE #Table1
(
    Table1ID INT,
    Table2ID INT,
    NAME VARCHAR(32)
)

INSERT INTO #Table1
VALUES 
      (1, NULL, 'Fred')
     ,(2, NULL, 'Tom')
     ,(3, NULL, 'Sally')     

--ok, im inserting into #Table2
drop table #Table2
CREATE TABLE #Table2
(
    [Table2ID] [int] IDENTITY(1,1) NOT NULL,
    NAME VARCHAR(32)
)

--THE RUB, I want to insert Table2ID into table3 
--along with Table1ID. I cannot seem to reference table1
--Any Ideas?
insert into #Table2(NAME)
OUTPUT INSERTED.Table2ID, T.Table1ID into #Table3
select Name from #Table1 T
Run Code Online (Sandbox Code Playgroud)

Rem*_*anu 5

INSERT你不能这样做(正弦它缺少自己的FROM子句)但是你可以用MERGE来做:

MERGE INTO #Table2 as t2
USING #Table1 as t1 ON 0=1
WHEN NOT MATCHED BY TARGET THEN 
    INSERT (NAME) VALUES (t1.NAME)
OUTPUT INSERTED.Table2ID, t1.Table1ID ;
Run Code Online (Sandbox Code Playgroud)