插入后用主键更新表列(在一个语句中)

Posted

技术标签:

【中文标题】插入后用主键更新表列(在一个语句中)【英文标题】:Update table column with primary key after insert (in one statement) 【发布时间】:2020-04-15 07:31:02 【问题描述】:

使用更新语句,如何直接将列值设置为插入语句的主键?我需要这个作为一个声明。

我知道以下是错误的,但它有助于我的想法通过:

update AppNationalities
set CountrySelectionID = (
                            select [INSERTED.pkID] from
                            (
                                insert into CountrySelections
                                output INSERTED.pkID
                                values(CountryID, 'test', 0)
                            )
                        )

【问题讨论】:

您使用的是哪个数据库?请标记它。 你为什么要在同一个查询中实现这一点?先执行insert语句再执行update可能吗? 我使用 SQL Server 2012 @ismetguzelgun 我正在对许多表进行广泛修复,并希望使用简单的 SQL 语句来修复它们。没有存储过程或循环或任何东西......只是一个简单的语句。 这里有很多错误。首先,我知道您想一次性实现目标,但您的声明中没有 where 子句。让我们再想一想。您在 CountrySelections 表中插入一些值,然后呢?如果没有正确的 where 子句,AppNationalities 表如何知道应该更新哪一行?也许 AppNationalities 甚至在 CountrySelections 表中都没有您要查找的国家/地区吗? 【参考方案1】:

将值放入临时表中:

declare @ids table (pkID int);

insert into CountrySelections
    output INSERTED.pkID into @ids
    values (CountryID, 'test', 0);

update AppNationalities
    set CountrySelectionID = i.id
    from @ids i;

我认为UPDATEDELETE 语句的FROM 子句中不允许使用output 子句。

【讨论】:

以上是关于插入后用主键更新表列(在一个语句中)的主要内容,如果未能解决你的问题,请参考以下文章

Sql 从一个表列中选择一个最小值,并在一个 SQL 语句中将结果插入到另一个表列中

SQL 一个表只有一个自增的主键字段,如何插入

标准update语法 单表更新或较简单的语句采用使用此方案更优。

Sql 语句:在要插入的字段中未指定主键时,插入键更新未按预期工作

mybatis怎么批量插入数据库

用主键创建视图?