我们在例子中使用的表包含两个nchar栏——ZIPCode和City栏。你可以使用任何SQL Server表,只要其中包含一个邮政编码栏即可。
3a<0 ]G$p>5 " 按照我们的例子,运行下列语句建立表:
"q,saH\& CREATE TABLE ZIPCodesZIPCodenchar(5), City nchar(30)
^nV[,bKT 在Management Studio的Object Explorer中,打开上面的表。
Mq`.{.Qe 右击Constraints(约束)并选择New Constraint(新约束)。
vk`x] 在CHECK Constraints对话框的Expression(表达式)框中输入以下约束表达式,如图A所示(仅显示一部分)。
Bq! 3{T ZIPCode like '[0-9] [0-9] [0-9] [0-9] [0-9]'
,1-7q|9 将约束命名为CK_ZIPCodes_ZIPCoce。
.8)oht 输入一段简短的说明,如“限定邮政编码为五位数字”。
]BUqh|mB] 点击Add(添加)然后Close(关闭)。
H%7 l&GuO 在Standard(标准)菜单上点击Save(保存)。
?^hK%/ 图A
NEM%F&sY_ s. K m F\,;Mvsf ;4kc"?VW CHECK约束使用一个表达式决定用户输入是否有效
x4&;XK'^_. :() qds 你可以避开手动过程,执行一个下列格式的SQL语句(只要表已经存在):
Tqp$VR+n" agfFw@I)q ALTER TABLE tablename ADD CONSTRAINT constraintname CHECK (expression)
.zJGyT;M8 N]7%kzWP 如果是上例中的表,则执行以下语句:
;G*Qy$q @ 7X~#XpL ALTER TABLE dbo.ZIPCodes ADD CONSTRAINT CK_ZIPCodes_ZIPCode CHECK (ZIPCode like '[0-9] [0-9] [0-9] [0-9] [0-9]')
R`0oE~@ h31/E2g [0-9]部分将指定位置的字符限定为0-9之间的任何数字。由于表达式重复使用了五个[0-9],表示这个约束只允许五个数字。大括号([])是你指定一组字符所用到的通配符。(欲了解约束表达式的更多信息,请查看在线手册。)
lX8EHh7S %79 4o { 添加CHECK约束后,点击New Query(新查询)并执行以下SQL语句增加一个无效的邮政编码:
XPU**>cw YR8HRj e INSERT ZIPCodes (ZIPCode, City)
%<%A`rP# 'x+2Q VALUES ('555aa', 'Smallville')
<A9Oq_ 7 S^U5 图B显示得到的结果。值555aa中包含两个违反[0-9]约束的字符。因此,SQL Server拒绝这个输入。不使用CHECK约束,SQL Server将接受555aa这个值。
<H30%sJo U{}A 4H( 图B
y!P?T(7 l 7b < qj 't' YS6KM3=9c CHECK约束不会接受555aa,因为其中包含alpha字符
Z bu&tj@ IR|E\ 记住,上面例子中的约束并不能保证它接受的输入确实是一个有效的邮政编码。它只能保证接受的值仅包含数字。