无法在SQL中插入重复的密钥
我想插入无法在SQL中插入重复的密钥,sql,sql-server,Sql,Sql Server,我想插入 id Name 1 A 2 B 3 C 每一行的主键列必须具有不同的值。您正在将A中的记录插入自身,因此您正在尝试使用已在使用的主键值创建新行。这将导致您看到的错误消息 如果必须以这种方式插入记录,则需要在PK列中包含包含唯一值的策略。如果您不能使用自动增量规则(常规方法),则您的逻辑需要强制执行此要求,否则您将继续看到类似这样的错误。您正在从表A中选择并直接插入。这意味着您插入的ID值肯定已经存在 消息说ID col上有一个PrimaryKey,并且要求列中的值是唯一的
id Name
1 A
2 B
3 C
每一行的主键列必须具有不同的值。您正在将
A
中的记录插入自身,因此您正在尝试使用已在使用的主键值创建新行。这将导致您看到的错误消息
如果必须以这种方式插入记录,则需要在PK列中包含包含唯一值的策略。如果您不能使用
自动增量
规则(常规方法),则您的逻辑需要强制执行此要求,否则您将继续看到类似这样的错误。您正在从表A
中选择并直接插入。这意味着您插入的ID值肯定已经存在
消息说ID col上有一个PrimaryKey,并且要求列中的值是唯一的。因此,它不允许您执行该操作
要根据所述要求修复查询,请将脚本更改为:
id Name
4 A
5 B
6 C
插入到(id、名称)
选择ti.id+3,ti.Name
从一个ti
其中ti.id>=1和ti.id,正如雅科夫·埃利斯所说
每一行的主键列必须具有不同的值
因为有一个WHERE子句,它将行总数限制为3行
唯一Id为1、2和3的
因此,如果您想替换它们,而不是尝试在它们已经存在的地方插入它们并生成错误
也许你可以更新它们?
这将解决你的问题
更新
添加额外代码后。。。
您应该将唯一密钥标识符设置为ID号,而不是ABC字段名(无论您如何称呼它)您需要调整插入行的ID。在生成键4、5、6的示例中:
insert into A (id,Name)
select ti.id + 3,ti .Name
from A ti
where ti.id >= 1 AND ti.id<=3
插入到(id、名称)
选择ti.id+3作为新键,ti.Name
从一个ti
其中ti.id>=1且ti.id=1且ti.idIt仅表示您正在插入表中已存在的值。你能给我一些表格格式的记录吗?或者你可以解释一下你想做什么。主键应该是唯一的。你为什么给我们一个插入
和选择
?这是一个(!)查询吗?@BenjaminM:aINSERT
可以基于SELECT
。这是一个完全有效的语句。对不起,我不想将主键调整为自动递增。您还有其他选择。如果您不想调整PK字段,则可以。但这就是您收到所询问的错误的原因。
insert into A (id,Name)
select ti.id + 3,ti .Name
from A ti
where ti.id >= 1 AND ti.id<=3
insert into A (id,Name)
select ti.id + 3 as NewKey,ti.Name
from A ti
where ti.id >= 1 AND ti.id<=3
insert into A (id,Name)
select ti.id + 100000 as NewKey,ti.Name
from A ti
where ti.id >= 1 AND ti.id<=3