更改表格并添加UNIQUE键值导致出错

I have a table called Animal. AnimalId is the primary key & I wanted to set the column AnimalType_id as UNIQUE (I have an AnimalType table and need to set a foreign key here)

ALTER TABLE Animal
ADD UNIQUE Animal.AnimalType_id int

两张表中都有数据,因为我无法删除表格。

但是这会导致错误:

消息102,级别15,状态1,行2
  “。”附近的语法错误。
2
额外 编辑
意见: 1
@ Conrad Frix是的错误是什么?
额外 作者 TechGuy,
Msg 102,Level 15,状态1,行2'。'附近的语法不正确。
额外 作者 TechGuy,
而错误是...
额外 作者 Conrad Frix,
@chathuraRanasinghe当您尝试添加唯一约束时,看到的错误消息是什么?
额外 作者 Daniel Renshaw,

5 答案

有关如何添加表约束,请参阅文档

ALTER TABLE Animal ADD CONSTRAINT UQ_Animal_AnimalTypeId UNIQUE (AnimalType_id)

这听起来像AnimalType_id是一个外键,所以我只是想检查你的理解,通过使这个列独一无二,你将这种关系变成了一个 - 你只能拥有一种类型的动物。

由于您在添加唯一约束时遇到了错误,因此我会建议您实际需要一个外键而不是唯一约束:

ALTER TABLE Animal
    ADD CONSTRAINT FK_Animal_AnimalType
    FOREIGN KEY
    (
        AnimalType_id
    )
    REFERENCES AnimalType
    (
        id
    )

我必须猜测AnimalType表名的名称,它是主键列名 - 如果它们不正确,请更改它们。

12
额外
甚至更好:名称您的独特约束! ALTER TABLE Animal ADD CONSTRAINT UQ_Animal_AnimalTypeId UNIQUE(AnimalType_id)
额外 作者 marc_s,
@chathuraRanasinghe:显然,你的数据已经有重复 - 你不能在包含重复值的列上创建一个UNIQUE约束。修复这些重复项 - 然后然后,您可以创建唯一约束
额外 作者 marc_s,
然后我得到这个错误..
额外 作者 TechGuy,
Msg 156,Level 15,State 1,Line 3关键字'UNIQUE'附近的语法错误。
额外 作者 TechGuy,
我已经有了这个表中的主键..我得到了这个错误> Msg 1505,Level 16,State 1,Line 1 CREATE UNIQUE INDEX语句终止,因为找到了对象名称'dbo.Animal'的重复键和索引名称'UQ_Animal_AnimalTypeId'。重复的键值是(1)。
额外 作者 TechGuy,
查看场景>> 链接
额外 作者 TechGuy,
@chathuraRanasinghe对不起,使用 CONSTRAINT 关键字时需要一个约束名称。回答编辑;并感谢@marc_s。
额外 作者 Daniel Renshaw,
@chathuraRanasinghe你确定你希望这个列是独一无二的吗?正如我在我的回答中提到的那样,它会使关系1-1和你的错误表明,这不是你想要的。
额外 作者 Daniel Renshaw,

如果您习惯于为所创建的所有对象(即使是约束条件)提供名称,那么在稍后需要禁用,放弃或更改约束时,您将有更轻松的时间:

ALTER TABLE Animal ADD CONSTRAINT UQ_Animal_Type UNIQUE (AnimalType_id)

通过创建唯一索引也可以获得更灵活的约束效果。

2
额外
我已经有了这个表中的主键..我得到了这个错误> Msg 1505,Level 16,State 1,Line 1 CREATE UNIQUE INDEX语句终止,因为找到了对象名称'dbo.Animal'的重复键和索引名称'UQ_Animal_AnimalTypeId'。重复的键值是(1)。 -
额外 作者 TechGuy,
现在明白了。 UNIQUEFOREIGN KEY 是两个不同的东西。 ALTER TABLE动物添加约束FK_Animal_Type FOREIGN KEY(AnimalType_id)REFERENCES Animal_Type(AnimalType_id)
额外 作者 Jirka Hanika,

尝试这个

ALTER TABLE table_name ADD CONSTRAINT UNIQUE(column_name)

1
额外

我认为你正在尝试这样做:

ALTER TABLE Animal
ADD COLUMN AnimalType_id int;
0
额外
没有actual.already我有coloumn叫AnimalType_id ..我想设置该ID作为一个唯一的关键
额外 作者 TechGuy,

看来列中的数据并不是唯一的。 当您在列上创建唯一约束时,不能有任何重复条目(最多只能有一个为空)

0
额外
实际上这是从1分贝到另一分贝的数据传输,增加了更多的彩色。这就是为什么
额外 作者 TechGuy,