VÉRIFICATION sur plusieurs colonnes CONTRAINTE
-
26-09-2019 - |
Question
J'utilise SQL Server 2008
J'utilise un CONTRAINTE CHECK sur plusieurs colonnes de la même table pour essayer de valider la saisie des données.
Je reçois une erreur:
contrainte colonne CHECK pour la colonne références « » AAAA une autre colonne, table 'XXXX'.
CONTRAINTE ne fonctionne CHÈQUE pas ainsi.
Toute autre façon de mettre en œuvre ce sur une seule table sans utiliser FK?
Merci
Voici un exemple de mon code
CREATE TABLE dbo.Test
(
EffectiveStartDate dateTime2(2) NOT NULL,
EffectiveEndDate dateTime2(2) NOT NULL
CONSTRAINT CK_CmsSponsoredContents_EffectiveEndDate CHECK (EffectiveEndDate > EffectiveStartDate),
);
La solution
Oui, définir le CONTRAINTE au CHÈQUE Tableau niveau
CREATE TABLE foo (
bar int NOT NULL,
fred varchar(50) NOT NULL,
CONSTRAINT CK_foo_stuff CHECK (bar = 1 AND fred ='fish')
)
Vous déclarez qu'il en ligne comme colonne contrainte
...
fred varchar(50) NOT NULL CONSTRAINT CK_foo_fred CHECK (...)
...
Modifier, plus facile à afficher que de décrire. Correction de vos virgules.
CREATE TABLE dbo.Test
(
EffectiveStartDate dateTime2(2) NOT NULL,
EffectiveEndDate dateTime2(2) NOT NULL, --need comma
CONSTRAINT CK_CmsSponsoredContents_EffectiveEndDate CHECK (EffectiveEndDate > EffectiveStartDate) --no comma
);
Bien sûr, les restes de question utilisez-vous une contrainte CHECK où il devrait être une contrainte FK ...?
Autres conseils
Les contraintes de vérification peut se référer à une seule colonne ou à l'ensemble du dossier.
Utilisez cette syntaxe pour les contraintes au niveau record:
ALTER TABLE MyTable
ADD CONSTRAINT MyCheck
CHECK (...your check expression...)
Vous pouvez simplement appliquer votre validation dans un déclencheur sur la table en particulier que de toute façon l'opération sera annulée si le contrôle a échoué.