我正在将一个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
答案 0 :(得分: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 ;
答案 1 :(得分:1)
将转化ID字段放在表格中。这不会污染表格,它正在正确处理问题。另外,您可以在输出子句中将其取回。而且它也会使更新子表更简单。除非你的开发人员在生产代码中使用Select *,否则我认为没有理由不这样做。