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),
);
Était-ce utile?

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é.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top