Can you replace or update a SQL constraint?

前端 未结 3 1227
灰色年华
灰色年华 2020-12-29 22:08

I have written the following constraint for a column I\'ve called \'grade\':

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


        
相关标签:
3条回答
  • 2020-12-29 22:28

    Drop the constraint, and then add the replacement constraint. You can't update a constraint in SQL Server at least.

    ALTER TABLE SomeTable DROP CONSTRAINT gradeRule
    

    In addition, you'll need to update the table data before adding the new constraint, so that it meets the new constraint.

    0 讨论(0)
  • 2020-12-29 22:37

    If you change the constraint, all of the data currently in the table must meet the constraint. So if you had 2 rows of data with 'moderate' and tried to change the constraint to easy, medium, and hard, it would not let you.

    So you would have to make the new constraint (easy, moderate, medium, difficult, hard) or, update the data to the new values - moderate --> medium etc.

    0 讨论(0)
  • 2020-12-29 22:41

    You could drop the existing constraint, and add the new constraint with the NOCHECK option. This would allow you to add the constraint even though data in the table violates the constraint. The problem with doing this though would be that you wouldn't be able to update existing records without making them pass the constraint first.

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

    Although this is possible, its not usually recommended because of the potential problems with future updates of the data.

    0 讨论(0)
提交回复
热议问题