一个表中的列之间的SQL Server限制

时间:2014-01-21 17:25:41

标签: sql sql-server

我有下表:

 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) unique
    ,UserID varchar(30)
    ,Password varchar(30) not null
    ,CCtype varchar(8)
    ,CCNumber varchar(16)
    ,primary key(UserID)        
);

我想写一个限制,如果有CCNumber,CCType不能为空。反过来说还不错。如果我有类型,我可能没有号码,那没关系。 我已经尝试过这些约束,但是当我测试时两者都没有按预期工作。

,constraint CCNumber_no_CCType check((CCNumber is null) or (CCType is null))

,constraint CCNumber_no_CCType check((CCNumber is not null) and (CCType is null))

4 个答案:

答案 0 :(得分:4)

您想要的约束是:

constraint CCNumber_no_CCType check((CCNumber is null) or (CCType is not null))

这是一种更通用的思考方式。如果你有“如果A - > B”,那么当B为真或不是A时,这是真的。

答案 1 :(得分:1)

尝试如下:

constraint CCNumber_no_CCType check((CCNumber is null) 
         or (CCNumber is not null and CCType is not null))

正如其他人所指出的,K map简化应该意味着or (CCNumber is not null ..变得多余。

答案 2 :(得分:1)

尝试在第一次试用的第二部分中添加“not”:

,constraint CCNumber_no_CCType check((CCNumber is null) or (CCType is not null))

答案 3 :(得分:1)

constraint CCNumber_no_CCType(CCNumber = '' OR (CCNumber <> '' AND CCType IS NOT NULL))