不能在对象中插入重复的键行'具有唯一索引'@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)

不能在对象中插入重复的键行'具有唯一索引'@KOD_CLIENT'

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很少是一个好主意,因为同时写可能会发生冲突并阻止插入成功。您可能需要重新考虑数字生成,并基于—例如—自动增量列。