问题描述
问题是:如何使用规则来限制数据表中字段的有限范围
解决方案
解决方案二:
使用rule或者CHECK约束都可以达到你要的效果!建议在数据库层实施!如果是在界面层,建议定义属性检查。
解决方案三:
能不能详细的介绍一下啊,我不太清楚唉,谢谢
解决方案四:
CHECK约束列可以有任意多个CHECK约束,并且约束条件中可以包含用AND和OR组合起来的多个逻辑表达式。列上的多个CHECK约束按创建顺序进行验证。搜索条件必须取值为布尔表达式,并且不能引用其它表。列级CHECK约束只能引用被约束的列,表级CHECK约束只能引用同一表中的列。当执行INSERT和DELETE语句时,CHECKCONSTRAINTS和规则具有相同的数据验证功能。当列上存在规则和一个或多个CHECK约束时,将验证所有限制。LZ参考--使用CHECK约束--下例显示对输入到jobs表中的min_lvl列和max_lvl列的值的限制。这两个约束都未命名:CHECK(min_lvl>=10)--与CHECK(max_lvl<=250)--下例显示对输入到employee表的emp_id列中的字符数据具有模式限制的命名约束。CONSTRAINTCK_emp_idCHECK(emp_idLIKE'[A-Z][A-Z][A-Z][1-9][0-9][0-9][0-9][0-9][FM]'ORemp_idLIKE'[A-Z]-[A-Z][1-9][0-9][0-9][0-9][0-9][FM]')--下例指定pub_id必须在特定的列表中或遵循给定的模式。此约束用于publishers表中的pub_id列。CHECK(pub_idIN('1389','0736','0877','1622','1756')ORpub_idLIKE'99[0-9][0-9]')--F.完整的表定义--下例显示pubs数据库中所创建的三个表(jobs、employee和publishers)的完整表定义,其中包含所有的约束定义。/***************************jobstable***************************/CREATETABLEjobs(job_idsmallintIDENTITY(1,1)PRIMARYKEYCLUSTERED,job_descvarchar(50)NOTNULLDEFAULT'NewPosition-titlenotformalizedyet',min_lvltinyintNOTNULLCHECK(min_lvl>=10),max_lvltinyintNOTNULLCHECK(max_lvl<=250))/**************************employeetable**************************/CREATETABLEemployee(emp_idempidCONSTRAINTPK_emp_idPRIMARYKEYNONCLUSTEREDCONSTRAINTCK_emp_idCHECK(emp_idLIKE'[A-Z][A-Z][A-Z][1-9][0-9][0-9][0-9][0-9][FM]'oremp_idLIKE'[A-Z]-[A-Z][1-9][0-9][0-9][0-9][0-9][FM]'),/*EachemployeeIDconsistsofthreecharactersthatrepresenttheemployee'sinitials,followedbyafivedigitnumberrangingfrom10000through99999andthentheemployee'sgender(MorF).A(hyphen)-isacceptableforthemiddleinitial.*/fnamevarchar(20)NOTNULL,minitchar(1)NULL,lnamevarchar(30)NOTNULL,job_idsmallintNOTNULLDEFAULT1/*Entryjob_idfornewhires.*/REFERENCESjobs(job_id),job_lvltinyintDEFAULT10,/*Entryjob_lvlfornewhires.*/pub_idchar(4)NOTNULLDEFAULT('9952')REFERENCESpublishers(pub_id),/*Bydefault,theParentCompanyPublisheristhecompanytowhomeachemployeereports.*/hire_datedatetimeNOTNULLDEFAULT(getdate())/*Bydefault,thecurrentsystemdateisentered.*/)/******************publisherstable*********************/CREATETABLEpublishers(pub_idchar(4)NOTNULLCONSTRAINTUPKCL_pubindPRIMARYKEYCLUSTEREDCHECK(pub_idIN('1389','0736','0877','1622','1756')ORpub_idLIKE'99[0-9][0-9]'),pub_namevarchar(40)NULL,cityvarchar(20)NULL,statechar(2)NULL,countryvarchar(30)NULLDEFAULT('USA'))