Sto*_*per 25 sql constraints sql-update
我为一个名为'grade'的列写了以下约束:
CONSTRAINT gradeRule CHECK grade IN (‘easy’, ‘moderate’, ‘difficult’),
Run Code Online (Sandbox Code Playgroud)
是否有可能在以后更新gradeRule以具有不同的值?例如,'中等'和'困难'可以改为'中'和'硬'.
谢谢
Sco*_*vey 28
您可以删除现有约束,并使用NOCHECK选项添加新约束.这将允许您添加约束,即使表中的数据违反约束.这样做的问题在于,如果不首先通过约束,您将无法更新现有记录.
ALTER TABLE SomeTable DROP CONSTRAINT gradeRule
GO
ALTER TABLE SomeTable ADD CONSTRAINT gradeRule ... WITH NOCHECK
GO
Run Code Online (Sandbox Code Playgroud)
虽然这是可能的,但由于未来数据更新可能存在问题,因此通常不建议这样做.
删除约束,然后添加替换约束.您至少无法在SQL Server中更新约束.
ALTER TABLE SomeTable DROP CONSTRAINT gradeRule
Run Code Online (Sandbox Code Playgroud)
此外,您需要在添加新约束之前更新表数据,以使其满足新约束.
如果更改约束,则表中当前的所有数据都必须满足约束.因此,如果您有2行数据且具有"中等"并试图将约束更改为简单,中等和硬,那么它就不会让您失望.
所以你必须制定新的约束(简单,中等,中等,困难,困难),或者将数据更新为新值 - 中等 - >中等.