无法在对象'dbo.CLIENT'中插入具有唯一索引'@KOD_CLIENT'的重复键行

时间:2014-05-19 09:21:22

标签: c# asp.net sql sql-server asp.net-mvc

这是代码:

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.CLIENT'中插入重复的键行。与众不同   index' @KOD_CLIENT'。

列KOD的DataType是varchar(10)

1 个答案:

答案 0 :(得分:4)

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)) 

A simple SQLfiddle to show the difference

作为旁注,在数据库中生成自己的顺序ID很少是个好主意,因为同时写入可能会发生冲突并阻止插入成功。您可能需要重新考虑数字生成并将其基于 - 例如 - 自动增量列。