我为一个名为'grade'的列编写了以下约束:
CONSTRAINT gradeRule CHECK grade IN (‘easy’, ‘moderate’, ‘difficult’),
以后可以更新gradeRule
以获得不同的值吗?例如,“中等”和“困难”可以改为“中等”和“硬”。
由于
答案 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行数据且具有“中等”并试图将约束更改为简单,中等和硬,那么它就不会让您失望。
因此您必须制定新约束(简单,中等,中等,困难,难以)或将数据更新为新值 - 中等 - >媒体等。