2013-05-05 82 views
0

我有如下表:使触发器/案例SQL

create table Sale(
    bankname  char(8)  null, 
    controleoptiename char(10)  not null, 
    creditcardnummer numeric(19)  null, 
    username   char(10)  not null, 
    accountnummer  numeric(7)  null, 
    constraint pk_username primary key(username) 
) 

我试图与下面的规则的情况下/触发: 如果插入controleoptiename词“的信用卡”,然后creditnummer必须包含数字,否则它将为NULL。

我该怎么做?

+3

Wich RDBMS's?你有没有尝试过一些东西,也许是触发器,然后发布代码。 – Yaroslav 2013-05-05 21:12:34

回答

0

你通常会写一个检查约束来实现这一点。您需要执行规则

controleoptiename = 'Creditcard and isNumber(creditnummer) or 
controleoptiename != 'Creditcard and creditnummer is null 

这是伪代码,真正的语法取决于你的RDBMS。

Check-contraint一次强制执行此规则。您只请求新添加的Creditcard值需要符合规则(允许违反已存在于数据库中的行)。通常检查约束是你真正想要的。

0

您可能希望考虑一个更强大,更简单的解决方案:为信用卡号创建一个表,并在该表中强制执行所有行的数字规则。