sql-server - SQL Server插入语句使用INSERTED获取新ID和现有ID

标签 sql-server insert identity

我正在将记录从一个 SQL Server 数据库插入到另一个数据库中。我需要获取新插入的 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

最佳答案

你不能用 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 ;

关于sql-server - SQL Server插入语句使用INSERTED获取新ID和现有ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3167302/

相关文章:

sql - 计算连续行的时间差

authentication - 我们可以将身份服务器 4 中的用户限制为特定应用程序吗?

.net - 如何 'select' 表的当前标识值?

c# - 如何解决错误 "The foreign key name was not found on the dependent type "

c# - 如何验证 DataGridView 输入?

mysql - SQL - MVC - 插入到 2 个表中

c# - EDMX 生成 Nullable bool 而不是 bool

javascript - 如何在 body 标签中插入 Before() 元素?

java - MyBatis 获取最后插入的 Id

python - Sqlite 插入不适用于 python