Sql 数据库具有完全相同的记录行..为什么?

Sql 数据库具有完全相同的记录行..为什么?,sql,sql-server,database,database-design,Sql,Sql Server,Database,Database Design,我的数据库有这个问题。有两行记录具有完全相同的值,这对我来说没有意义,因为我试图使用MS SQL Server插入确切的值,客户端本身将提示错误-->“违反唯一密钥约束”IDX_XXX“。无法在对象“表XXX”中插入重复键。 声明已被终止。” 所以我想知道在什么情况下或者数据库设计会允许两个精确的记录而不会有任何错误 数据如下: Column 1 || Column 2 || Column 3 --------------------------------------- Fer

我的数据库有这个问题。有两行记录具有完全相同的值,这对我来说没有意义,因为我试图使用MS SQL Server插入确切的值,客户端本身将提示错误-->“违反唯一密钥约束”IDX_XXX“。无法在对象“表XXX”中插入重复键。 声明已被终止。”

所以我想知道在什么情况下或者数据库设计会允许两个精确的记录而不会有任何错误

数据如下:

Column 1 || Column 2 || Column 3 --------------------------------------- Ferrari || Rims || Tyre --------------------------------------- Ferrari || Rims || Tyre 第1列| |第2列| |第3列 --------------------------------------- 法拉利| |轮辋| |轮胎 --------------------------------------- 法拉利| |轮辋| |轮胎
有一种方法可以检查数据是否确实是重复的。删除约束,然后重新创建它。如果该约束确实是重复的,则不会重新创建该约束。这两条记录中很可能存在差异,您可能希望转到字符串的字节级别并比较字符串的每个字节

在网格结果中看不到Chr(13)或Chr(10),还有许多其他字符也看不到

我不确定这是否真的有效,但您可以尝试以下方法:

Select convert(varbinary(max), [Column 1]), convert(varbinary(max), [Column 2]), convert(varbinary(max), [Column 3]) where <use your criteria to get the records>
选择convert(varbinary(max),[Column 1])、convert(varbinary(max),[Column 2])、convert(varbinary(max),[Column 3]),其中

这将显示字符串中字符的十六进制,您可以通过这种方式比较字符串

如何知道行实际上是完全相同的,而不仅仅是看起来相同?检查其中一个键值中是否有额外的空格。仔细想想,这似乎不太可能,我的意思是空格。可能还有其他字符,比如空格,但实际上不是空格字符吗?或者可能是一个特殊的e或a有不同的unicode字符?@LasseV.Karlsen嗨,我在excel中有提取的数据,我已经逐列检查过了…不太可能。而且数据的插入是通过存储过程进行的,不太可能有问题。仅仅是他4年前创造的一条记录就没有给我留下任何线索。SQL Server是正确的,这两行之间存在差异的可能性比SQL Server这一部分中存在缺陷的可能性要大得多。因此,这两行之间几乎肯定会有一些不同。+1,因为CHAR(10)/CHAR(13)问题比较常见,并且产生的场景与此完全相同。谢谢。以这种方式识别差异听起来更符合逻辑。