问题是这样的。
保证一条记录中homephone和businessphone两个字段只能有一个是有值。
即要么homephone有值,要么businessphone有值。
所以,这里值有e正确,建立一个触发器,当用户输入或者修改是,判断是否两个字段都有值,若都有值,则取消操作。
保证一条记录中homephone和businessphone两个字段只能有一个是有值。
即要么homephone有值,要么businessphone有值。
所以,这里值有e正确,建立一个触发器,当用户输入或者修改是,判断是否两个字段都有值,若都有值,则取消操作。
用触发器的话一定可以搞定,
D在一次插入很多条记录的时候就不能保障了,故不正确。
B的意思是说为表建一个规则保证两列不能同时为空!不过感觉规则没有这么厉害啊!
故选E
rule 没有能控制两个列的,所以A、B不对。
本来用CHECK也可以搞定,但C是说拒绝两个字段的NULL,和题的要求不符。
D是用触发器统计这两个字段的有值的个数,不知道能有什么作用。
题意应该是保证或者BusinessPhone column有值,或者HomePhone column有值。
从逻辑上来说这样也好理解些。我觉得应该选E
我也觉得选E,上面的题意确实是要么BusinessPhone column有值,要么HomePhone column有值,但E. Configure the trigger so that if one or more rows are found that meet these conditions, the trigger will cancel the data modification. 的these conditions指的是什么,为什么符合条件还要cancel the data modification。
是a value,非a value at least.
但不管怎么解释,答案都是E,D不够充分。
A,不允许为空
B,保证输入不为空,没有保证只有一个有值
C,CHECK只检查列
D,统计列
E,用TRIGGER保证满足条件,正确答案。
大家的意见如何?
更正:RULE检查列,CHECK检查行,TRIGGER检查过程,不能检查错误的输入。
因为要保证一条记录中homephone和businessphone两个字段至少一个有值。
constraint checkkl check((cast(isnull(k,0) as varchar(10))+cast(isnull(l,0) as varchar(10)))<>'00') 或者保证两个列只有一个值且必须有一个值
constraint checkkl check(((cast(isnull(k,0) as varchar(10))+cast(isnull(l,0) as varchar(10)))<>'00')
and (cast(isnull((k+l),1) as varchar(20))='1'))
不过B也是可以的。