2014-01-20 8 views
0

У меня есть следующие две таблицы:Ограничение на нужное поле, если другое поле присутствует в SQL

create table Person(
    FName varchar(15) not null 
    ,LName varchar(25) not null 
    ,Address varchar(100) 
    ,City varchar(30) 
    ,State varchar(30) 
    ,Zip varchar(10) 
    ,Phone varchar(15) 
    ,Email varchar(60) 
    ,UserID varchar(30) 
    ,Password varchar(30) not null 
    ,CCtype numeric(1) check (CCType >=3 and CCType <=6) 
    ,CCNumber numeric check(CCNumber >= 15 and CCNumber <=16) 
    ,primary key(UserID) 
    ,constraint unique_email unique(Email) 
); 

create table Course(
    CourseId numeric(10,0) 
    ,Name varchar(100) not null 
    ,Start date not null 
    ,[End] date not null 
    ,Description varchar(255) 
    ,Price numeric(5,2) 
    ,Category varchar(30) 
    ,TrainerID varchar(30) 
    ,primary key(CourseId) 
    ,constraint date_ck check([End] > Start) 
    ,foreign key(TrainerID) references Person(UserID) 
    ,constraint unique_combo unique(Name, Start) 
); 

Я хочу создать ограничение, так что, когда CCNumber присутствует действительный CCType должен также присутствовать.

Большое спасибо за помощь

+0

номер кредитной карты, которая только 15 цифр ??? – ganders

+0

Не знаю, как такое ограничение. Что делать, если один из вариантов CCType - «Нет», тогда это может потребоваться ... – ganders

+0

@ganders AMEX card №s являются 15-значными. –

ответ

1
ALTER TABLE Person 
ADD CONSTRAINT CK_CCvalidity 
CHECK 
(
    (CCType is null and CCNumber is null) 
    or 
    (
     (CCType >=3 and CCType <=6) 
     and 
     (CCNumber >= 15 and CCNumber <=16) 
    ) 
) 
Смежные вопросы