代码之家  ›  专栏  ›  技术社区  ›  StormFoo

可以替换或更新SQL约束吗?

  •  21
  • StormFoo  · 技术社区  · 17 年前

    我为我称为“等级”的列编写了以下约束:

    CONSTRAINT gradeRule CHECK grade IN (‘easy’, ‘moderate’, ‘difficult’),
    

    是否可以稍后更新 gradeRule 有不同的价值观?例如,“中等”和“困难”可以更改为“中等”和“困难”。

    谢谢

    3 回复  |  直到 14 年前
        1
  •  24
  •   Scott Ivey    17 年前

    可以删除现有约束,并使用nocheck选项添加新约束。这将允许您添加约束,即使表中的数据违反了约束。但这样做的问题是,如果不让现有记录先通过约束,就无法更新它们。

    ALTER TABLE SomeTable DROP CONSTRAINT gradeRule
    GO
    ALTER TABLE SomeTable ADD CONSTRAINT gradeRule ... WITH NOCHECK
    GO
    

    尽管这是可能的,但通常不建议这样做,因为将来更新数据时可能会出现问题。

        2
  •  6
  •   Scott Ferguson    17 年前

    删除约束,然后添加替换约束。 至少不能更新SQL Server中的约束。

    ALTER TABLE SomeTable DROP CONSTRAINT gradeRule
    

    此外,在添加新约束之前,您需要更新表数据,以便它满足新约束。

        3
  •  5
  •   Mark Sherretta    17 年前

    如果更改约束,表中当前的所有数据都必须满足约束。因此,如果您有两行数据带有“中等”并且试图将约束更改为“简单”、“中等”和“硬”,那么它不会允许您这样做。

    因此,您必须创建新的约束(简单、中等、中等、困难、困难),或者将数据更新为新值-中等-->中等等等。