【问题标题】:SQL Unique Key ViolationSQL 唯一键冲突
【发布时间】:2015-02-20 13:47:36
【问题描述】:

我遇到了唯一密钥违规,我不知道为什么,这是我的情况。 我有一个包含以下字段的表格:

ID, LocationID, Name, Description, Dewey

ID 显然是主键,LocationID 是链接到Location 表的外键,其他字段只是varchar 字段,与它们没有关联。

当我插入LocationID 和Name 与表中另一行具有相同值的行时,我收到此错误:

违反 UNIQUE KEY 约束“IX_InternalLocation”。无法在对象“dbo.InternalLocation”中插入重复键。声明已终止。

如果其中任何一个字段不同,我可以插入记录没有问题。这对我来说似乎很奇怪,因为这些行都不是表的唯一标识符。

由于某种原因,数据库似乎认为这些字段一起形成了一个键,但这不是应该的,当我查看表属性时,它不是这样。任何帮助将不胜感激。

【问题讨论】:

  • 检查一下 IX_InternalLocation 的定义是什么,或者更确切地说在这里发布整个表的定义。
  • 一张表可能有多个唯一键/索引,听起来就是这种情况。
  • 投反对票?真的为什么你会否决这个问题??

标签: sql-server primary-key


【解决方案1】:

运行此查询:

SELECT tc.Constraint_Name, cc.Column_Name 
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS tc
INNER JOIN INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE cc 
   ON tc.CONSTRAINT_NAME = cc.CONSTRAINT_NAME
WHERE tc.CONSTRAINT_NAME = 'IX_InternalLocation' AND tc.CONSTRAINT_TYPE = 'Unique'

针对您的数据库。

你应该得到这样的结果:

Constraint_Name                  Column_Name
----------------------------------------------------- 
IX_InternalLocationDateMexri     LocationID 
IX_InternalLocationYpallhlosId   Name

这意味着在这两列上放置了一个UNIQUE INDEX,禁止任何重复的对插入。

【讨论】:

  • 是的,你是对的!此表是由其他人创建的,并且已添加此约束。现在需要删除系统中的更改。感谢您的帮助!
猜你喜欢
  • 2015-10-30
  • 2019-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-22
  • 1970-01-01
  • 2015-09-10
相关资源
最近更新 更多