27 votes

Peut-on remplacer ou mettre à jour une contrainte SQL ?

J'ai écrit la contrainte suivante pour une colonne que j'ai appelée "grade" :

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

Est-il possible de mettre à jour ultérieurement le gradeRule d'avoir des valeurs différentes ? Par exemple, "modéré" et "difficile" pourraient être remplacés par "moyen" et "difficile".

Merci

30voto

Scott Ivey Points 19577

Vous pouvez supprimer la contrainte existante et ajouter la nouvelle contrainte avec l'option NOCHECK. Cela vous permettrait d'ajouter la contrainte même si les données de la table violent la contrainte. Le problème, cependant, est que vous ne pourrez pas mettre à jour les enregistrements existants sans leur faire passer la contrainte au préalable.

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

Bien que cela soit possible, ce n'est généralement pas recommandé en raison des problèmes potentiels liés aux futures mises à jour des données.

6voto

Scott Ferguson Points 3418

Supprimez la contrainte, puis ajoutez la contrainte de remplacement. Vous ne pouvez pas mettre à jour une contrainte, du moins dans SQL Server.

ALTER TABLE SomeTable DROP CONSTRAINT gradeRule

En outre, vous devrez mettre à jour les données de la table avant d'ajouter la nouvelle contrainte, afin qu'elles répondent à la nouvelle contrainte.

5voto

Mark Sherretta Points 5272

Si vous modifiez la contrainte, toutes les données actuellement présentes dans la table doivent respecter la contrainte. Ainsi, si vous avez deux lignes de données avec "modéré" et que vous essayez de modifier la contrainte en facile, moyen et difficile, vous ne pourrez pas le faire.

Il faudrait donc créer une nouvelle contrainte (facile, modéré, moyen, difficile, dur) ou mettre à jour les données avec les nouvelles valeurs - modéré --> moyen, etc.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X