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

时间:2009-05-14 01:16:24

标签: sql constraints sql-update

我为一个名为'grade'的列编写了以下约束:

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

以后可以更新gradeRule以获得不同的值吗?例如,“中等”和“困难”可以改为“中等”和“硬”。

由于

3 个答案:

答案 0 :(得分:25)

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

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

虽然这是可能的,但由于未来数据更新可能存在问题,因此通常不建议这样做。

答案 1 :(得分:6)

删除约束,然后添加替换约束。 您至少无法在SQL Server中更新约束。

ALTER TABLE SomeTable DROP CONSTRAINT gradeRule

此外,您需要在添加新约束之前更新表数据,以使其符合新约束。

答案 2 :(得分:5)

如果更改约束,则表中当前的所有数据都必须满足约束条件。因此,如果您有2行数据且具有“中等”并试图将约束更改为简单,中等和硬,那么它就不会让您失望。

因此您必须制定新约束(简单,中等,中等,困难,难以)或将数据更新为新值 - 中等 - >媒体等。