sql-server - 将数据插入表中,其中 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
解决方案
试试这个,你的表 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
推荐阅读
- javascript - 无法在其他域上设置 cookie。表达和反应
- css - 如何适合 React Modal 大小的孩子?
- c - 完全受 CPU 限制的代码的性能变化很大,原因不明
- ruby - Ruby Sorbet 哈希类型检查
- python - 尝试提取部分 id 时出现问题
- vuejs2 - NuxtJs 如何使用 axios filter api?
- vpn - 如何信任自签名根 CA 以在 Android 11 上与 VPN 一起使用
- javascript - 我在按钮中有图像,按钮和图像都有单独的 onclick 功能,当我在按钮上单击此图像时,它也会在按钮上执行功能
- php - php。在循环中为数组赋值
- splunk - 斯隆克。查找每个事件中发生的计数