不能在对象中插入重复的键行'具有唯一索引'@KOD_CLIENT'
本文关键字:索引 CLIENT @KOD 唯一 对象 插入 不能 | 更新日期: 2023-09-27 18:03:55
这是代码:
string CLIENT = "declare @KOD VARCHAR(10)
set @KOD = 'K' + (SELECT CAST(MAX(SUBSTRING(KOD,3,4)) + 1 as VARCHAR(7)) KOD
FROM CLIENT
WHERE INTERNET='TABLET')";
列KOD增加1,例如K1, K2, K3,当它达到K10时,我试图添加一行,它显示了我这个问题。
不能在对象'dbo '中插入重复的键行。客户端独一无二指数@KOD_CLIENT。
列KOD的DataType为varchar(10)
SELECT CAST(MAX(SUBSTRING(KOD,3,4)) + 1 as VARCHAR(7))
…在字符串上使用MAX
,因为字符串按字母顺序排序意味着2
大于10
。这将严重扰乱您的编号方案,因为表中有2和10,您将生成的下一个数字是3。
你想要的是先强制转换,然后对整数执行MAX
;
SELECT CAST(MAX(CAST(SUBSTRING(KOD,3,4) AS INT)) + 1 AS VARCHAR(7))
一个简单的SQLfiddle显示差异。
作为附带说明,在数据库中生成自己的顺序id很少是一个好主意,因为同时写可能会发生冲突并阻止插入成功。您可能需要重新考虑数字生成,并基于—例如—自动增量列。