WEB开发网
开发学院数据库MSSQL Server 使用检查约束验证SQL Server中的数据 阅读

使用检查约束验证SQL Server中的数据

 2009-04-16 10:27:11 来源:WEB开发网   
核心提示: 这个约束和前面的两个约束完成的事情是一样的,但你要记住,使用检查约束验证SQL Server中的数据(4),这样做有一个不好的后果,那就是最终在理解究竟是SalaryType列,例如,假设在payroll表上只有一个CK_Paryroll_SalaryType检查约束,还是Salary列,

这个约束和前面的两个约束完成的事情是一样的,但你要记住,这样做有一个不好的后果,那就是最终在理解究竟是SalaryType列,还是Salary列,或者这两列违反了你的检查约束时可能比较困难。

这样做之后还有一个让人烦恼的是不止使用一列来判断某个特定列的值是否有效,例如,假设我想要确保在输入HourlySalaryType时,我想要Salary小于100,或者在输入MonthlySalaryType时,Salary小于10000,当输入AnnualSalaryType时,Salary合计是准确的。为了实现这个约束条件,我使用下面的ADDCONSTRAINT子句:

ALTERTABLEdbo.PayrollWITHNOCHECK
ADDCONSTRAINTCK_Payroll_SalaryType_Based_On_Salary

CHECK((SalaryType='Hourly'andSalary<100.00)or

(SalaryType='Monthly'andSalary<10000.00)or

(SalaryType='Annual'));

在这里我将多列条件集中在一起了,又用or条件将它们进行分离,这样我的检查约束就可以验证每个不同的SalaryType的Salary值了。

理解遇到空值时会发生什么

回顾一下我在本文的第一小节“什么是检查约束”中讲到的“当检查约束的条件表达式返回一个FALSE值时,记录不能INSERT和UPDATE”,因为如此,空值可能让进入数据库的数据并不符合你的要求。例如,假设在payroll表上只有一个CK_Paryroll_SalaryType检查约束,只需要刷新检查约束所在内存即可:

ALTERTABLEdbo.Payroll
 

WITHNOCHECKADDCONSTRAINTCK_Payroll_SalaryType

CHECK(SalaryTypein('Hourly','Monthly','Annual'));

现在,如果你执行下面的INSERT语句:

上一页  1 2 3 4 5  下一页

Tags:使用 检查 约束

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接