2010-12-15 5 views
0

J'ai une table avec 2 colonnesSQL Server 2008: valeur de la colonne Restreindre par rapport à une autre valeur de la colonne

CREATE TABLE mytable 
(
    x int 
    y char(1) 
) 

Je voudrais appliquer contrainte y par rapport à la valeur de x. Par exemple, quand x = 5, je veux avoir y = 'a', quand x = 12 y = 'b' et ainsi de suite. Est-il possible de faire dans SQL Server 2008? Quelque chose comme

case when x = 5 then y='a' end 

Cette dernière instruction ne fonctionne pas, par conséquent, je demande analogique.

+0

Parfait! Merci pour les réponses. – Tim

Répondre

1
CREATE TABLE mytable 
(
    x int not null, 
    y char(1) not null, 
    constraint CK_mytable_myrules CHECK (
    1 = CASE 
      WHEN x=5 AND y='a' THEN 1 
      WHEN x=12 AND y='b' THEN 1 
     /* More rules here */ 
      ELSE 0 END 
) 

CAS expression doit toujours retourner une valeur . Les booléens ne font pas partie de SQL.


Ou, si la règle générale est « si nous n'apparié aucune de ces règles, laisser passer », vous avez deux choix - CASEs imbriqués, ou des règles « de repli » (ma propre, juste terme inventé):

CASEs imbriquées:

1 = CASE 
      WHEN x=5 THEN 
      CASE WHEN y='a' THEN 1 
        ELSE 0 END 
      WHEN x=12 THEN 
      CASE WHEN y='b' THEN 1 
        ELSE 0 END 
     /* More rules here */ 
      ELSE 1 END 

ou dans l'autre sens:

1 = CASE 
      WHEN x=5 AND y='a' THEN 1 
      WHEN x=5 THEN 0 
      WHEN x=12 AND y='b' THEN 1 
      WHEN x=12 THEN 0 
     /* More rules here */ 
      ELSE 1 END 
0

Il est possible de mettre en place de telles contraintes. Cf. link text Vous devez définir un UDF approprié.

Ah il semble y avoir d'autres possibilités aussi.

Questions connexes