Création et modification des contraintes CHECK
Vous pouvez créer une contrainte CHECK dans le cadre de la définition d'une table lorsque vous créez celle-ci. Si une table existe déjà, vous pouvez ajouter une contrainte CHECK. Les tables et colonnes peuvent contenir plusieurs contraintes CHECK.
Si une contrainte CHECK existe déjà, vous pouvez la modifier ou la supprimer. Par exemple, vous pouvez modifier l'expression utilisée par la contrainte CHECK sur une colonne de la table.
[!REMARQUE]
Pour modifier une contrainte CHECK, vous devez d'abord supprimer la contrainte CHECK existante, puis la recréer avec la nouvelle définition.
L'exemple suivant Transact-SQL crée une table puis la modifie en ajoutant une contrainte CHECK à la colonne CreditRating.
IF OBJECT_ID ('dbo.Vendors', 'U') IS NOT NULL
DROP TABLE dbo.Vendors;
GO
CREATE TABLE dbo.Vendors
(VendorID int PRIMARY KEY, VendorName nvarchar (50),
CreditRating tinyint)
GO
ALTER TABLE dbo.Vendors ADD CONSTRAINT CK_Vendor_CreditRating
CHECK (CreditRating >= 1 AND CreditRating <= 5)
Supprimez une contrainte CHECK pour ôter les limites imposées aux valeurs de données acceptables dans la ou les colonnes incluses dans l'expression de la contrainte.
Pour créer une contrainte CHECK lors de la création d'une table
Pour créer une contrainte CHECK sur une table existante
Pour supprimer une contrainte CHECK
Application d'une contrainte CHECK à l'aide de WITH NOCHECK
Si vous ajoutez une contrainte CHECK à une table existante, celle-ci peut s'appliquer aux nouvelles données seulement ou aux données existantes. Par défaut, elle s'applique aux données existantes comme aux nouvelles données. Utilisez l'option WITH NOCHECK de l'instruction ALTER TABLE pour appliquer la nouvelle contrainte uniquement aux nouvelles données ajoutées. Cette option s'avère utile lorsque les données existantes satisfont déjà à la nouvelle contrainte CHECK ou si une logique d'entreprise nécessite l'application de la contrainte à partir du moment présent seulement.
Supposons, par exemple, qu'une ancienne contrainte exige que les codes postaux soient limités à cinq chiffres et qu'une nouvelle contrainte requière des codes à neuf chiffres. Les anciennes données avec des codes postaux à cinq chiffres sont toujours valides et coexisteront avec les nouvelles données qui contiennent des codes postaux à neuf chiffres. Dès lors, seules les nouvelles données doivent être vérifiées en fonction de la nouvelle contrainte.
Faites néanmoins preuve de prudence lorsque vous ajoutez une contrainte sans vérifier les données existantes car, lors d'une telle opération, les contrôles du Moteur de base de données qui appliquent les règles d'intégrité pour la table ne sont pas mis en œuvre.
Pour empêcher la vérification des données existantes lors de la création d'une contrainte CHECK
Désactivation des contraintes CHECK
Vous pouvez désactiver les contraintes CHECK existantes pour des opérations spécifiques, telles que les opérations INSERT, UPDATE et le traitement de la réplication.
Instructions INSERT et UPDATE
La désactivation d'une contrainte CHECK permet de modifier les données de la table sans qu'elles soient validées par les contraintes. La désactivation d'une contrainte CHECK dans les instructions INSERT et UPDATE est conseillée si de nouvelles données vont enfreindre la contrainte ou que cette dernière ne doit s'appliquer qu'aux données figurant déjà dans la base de données.
Traitement de la réplication
Désactivez une contrainte CHECK pendant la réplication si la contrainte est spécifique à la base de données source. Lors d'une réplication de table, la définition et les données de cette table sont copiées de la base de données source vers une base de données de destination. Ces deux bases de données se trouvent généralement, mais pas nécessairement, sur des serveurs distincts. Si les contraintes CHECK spécifiques à la base de données source ne sont pas désactivées, elles risquent d'empêcher inutilement l'insertion de nouvelles données dans la base de données de destination. Pour plus d'informations, consultez Contrôle des contraintes, des identités et des déclencheurs avec l'option NOT FOR REPLICATION.
Pour désactiver une contrainte CHECK pour les instructions INSERT et UPDATE
Pour désactiver une contrainte CHECK pour la réplication
Pour obtenir des informations sur les contraintes CHECK