4

J'ai un tableau suivant, Client.Un moyen d'ajouter une contrainte entre deux domaines dans une table sans utiliser de déclencheur?

create table Client (
    ClientID int identity primary key, 
    TaxID  varchar(12), 
    SSN   varchar(12) 
) 
GO 

Le client peut avoir TaxID ou SSN ou les deux. Mais l'un ou l'autre devrait exister.
Actuellement, j'applique la règle à travers le déclencheur suivant.

create trigger trgClient_UniqueTaxIDSSN 
    on Client 
    after Insert, Update 
as 
    --; Check if either TaxID or SSN is not null. 

Mais est-il un moyen de déclarer une contrainte pour faire respecter la règle?

Répondre

5
ALTER TABLE Client ADD CONSTRAINT ck_TaxIDorSSN CHECK 
    (TaxID is not null or SSN is not null) 
+0

+1 pour donner le code pas des liens. Oh, et étant correct :-) – gbn

+0

@Adam: Merci Adam. Je jouais avec la création d'une contrainte de vérification en ligne dans 'CREATE TABLE'. Je n'étais pas conscient de déclarer une contrainte 'CHECK' à travers 'ALTER TABLE'. En ce moment, je créais une fonction pour passer à la contrainte CHECK, qui était plutôt infructueuse. – Sung

1

Vous devriez être en mesure de créer une contrainte de vérification, sur la table du client, de le faire.

http://msdn.microsoft.com/en-us/library/ms188258.aspx 
1

Vous pouvez créer un Check constraint qui vérifie nulle dans les deux champs:

ALTER TABLE Client ADD CONSTRAINT cn_TaxIDorSSNnotNULL CHECK 
    (TaxID IS NOT NULL OR SSN IS NOT NULL) 
Questions connexes