改变表&添加UNIQUE键导致错误

时间:2012-05-25 06:14:39

标签: sql sql-server sql-server-2008

我有一张名为Animal的表格。 AnimalId是主要关键&我想将列AnimalType_id设置为UNIQUE(我有一个AnimalType表,需要在这里设置一个外键)

ALTER TABLE Animal
ADD UNIQUE Animal.AnimalType_id int

两个表中都有数据,因此我无法删除表。

然而,这会导致错误:

  

Msg 102,Level 15,State 1,Line 2
  '。'。

附近的语法不正确

5 个答案:

答案 0 :(得分:15)

有关如何添加表约束的信息,请参阅documentation

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表名的名称及其主键列名称 - 如果它们不正确,请更改这些名称。

答案 1 :(得分:2)

如果你养成了为你创建的所有对象(甚至是约束)赋予名字的习惯,那么稍后当你需要禁用,删除或改变约束时,你将有更多的时间:

ALTER TABLE Animal ADD CONSTRAINT UQ_Animal_Type UNIQUE (AnimalType_id)

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

答案 2 :(得分:0)

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

ALTER TABLE Animal
ADD COLUMN AnimalType_id int;

答案 3 :(得分:0)

列中的数据似乎并不是唯一的。 当您在列上创建唯一约束时,您不能有任何重复的条目(最多可以有一个空值)

答案 4 :(得分:-1)

试试这个

  

ALTER TABLE table_name ADD CONSTRAINT UNIQUE(column_name)