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

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)

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


Sco*_*son 6

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

ALTER TABLE SomeTable DROP CONSTRAINT gradeRule
Run Code Online (Sandbox Code Playgroud)

此外,您需要在添加新约束之前更新表数据,以使其满足新约束.


Mar*_*tta 5

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

所以你必须制定新的约束(简单,中等,中等,困难,困难),或者将数据更新为新值 - 中等 - >中等.