首页 > 解决方案 > 将数据插入表中,其中 id 列应使用同一表中的最新 id 值递增而不使用标识

问题描述

我有一个表 temp1,其中包含所有数据,现在我需要将值插入另一个表“temp”,其中“temp”中的 id 列应该增加一个值,因为 temp 中有另一个标识列。

temp(id int primay key,name varchar(100),sql_identity int having identity)
temp1(name varchar(100))

当我尝试使用以下代码时

set @inc = 10
insert into temp 
select (select coalesce(max(id),0) + @inc from temp), name
from temp1

我在 SQL Server 中遇到以下错误:

消息 2627,级别 14,状态 1,第 4 行
违反主键约束“PK__temp__3213E83F7C06E24B”。无法在对象“dbo.temp”中插入重复键。重复键值为 (10)。
该语句已终止。

理想情况下,临时表中的数据应采用以下方式:

 id | name
 1  | val1
 2  | val2
 3  | val3

标签: sql-serverselectinsertprimary-key

解决方案


试试这个,你的表 temp1 有很多记录,这就是你得到这样的错误的原因。

set @inc = 10

insert into temp 
(
    id ,name 
)
select ROW_NUMBER() OVER (ORDER BY name)+(select coalesce(max(id),0) + @inc from temp), name 
from temp1

推荐阅读