【发布时间】:2009-05-14 01:16:23
【问题描述】:
我为我称为“等级”的列编写了以下约束:
CONSTRAINT gradeRule CHECK grade IN (‘easy’, ‘moderate’, ‘difficult’),
以后是否可以将gradeRule 更新为具有不同的值?例如,“中等”和“困难”可以更改为“中等”和“困难”。
谢谢
【问题讨论】:
标签: sql constraints sql-update
我为我称为“等级”的列编写了以下约束:
CONSTRAINT gradeRule CHECK grade IN (‘easy’, ‘moderate’, ‘difficult’),
以后是否可以将gradeRule 更新为具有不同的值?例如,“中等”和“困难”可以更改为“中等”和“困难”。
谢谢
【问题讨论】:
标签: sql constraints sql-update
您可以删除现有约束,并使用 NOCHECK 选项添加新约束。即使表中的数据违反了约束,这也允许您添加约束。但是这样做的问题是,如果不先让它们通过约束,您将无法更新现有记录。
ALTER TABLE SomeTable DROP CONSTRAINT gradeRule
GO
ALTER TABLE SomeTable ADD CONSTRAINT gradeRule ... WITH NOCHECK
GO
虽然这是可能的,但通常不建议这样做,因为未来更新数据可能会出现问题。
【讨论】:
删除约束,然后添加替换约束。 您至少不能在 SQL Server 中更新约束。
ALTER TABLE SomeTable DROP CONSTRAINT gradeRule
此外,您需要在添加新约束之前更新表数据,使其符合新约束。
【讨论】:
如果更改约束,表中当前的所有数据都必须满足约束。因此,如果您有 2 行“中等”的数据并尝试将约束更改为简单、中等和困难,它不会让您这样做。
因此,您必须设置新的约束条件(简单、中等、中等、困难、困难),或者将数据更新为新值 - 中等 --> 中等等。
【讨论】: