Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法在SQL中插入重复的密钥_Sql_Sql Server - Fatal编程技术网

无法在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:a
INSERT
可以基于
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