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

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

 2009-04-16 10:27:11 来源:WEB开发网   
核心提示: INSERTINTOdbo.Payrollvalues(1,1,'Hourly',25.00);INSERTINTOdbo.Payrollvalues(2,2,NULL,25.00);INSERTINTOdbo.Payrollvalues(3,3,'Horly

INSERTINTOdbo.Payrollvalues(1,1,'Hourly',25.00);
 

INSERTINTOdbo.Payrollvalues(2,2,NULL,25.00);

INSERTINTOdbo.Payrollvalues(3,3,'Horly',25.00);

你认为将会发生什么?只有第一条INSERT语句会起作用吗?第二条和第三条INSERT将会怎么样?它们都会违反CK_Payroll_SalaryType吗?结果是只有第三条INSERT语句会失败,它之所以失败是因为SalaryType被打乱了,不再仅仅是“Hourly”,“Monthly”或“Annual”了,那为什么第二个INSERT语句没有返回FALSE呢?很明显,NULL(空值)也不是有效的SalaryType,第二条INSERT语句能够工作的原因是它运行时CK_Payroll_SalaryType约束没有返回FALSE值,所以数据库引擎就插入了第二条记录。

为什么会这样呢?因为NULL(空值)在比较操作中时会返回UNKNOWN,因为UNKNOWN并不等价于FLASE,故没有违反检查约束。因此,你在写检查约束时要当心,你可能想要排除掉包含NULL(空值)的值。上面的例子如果想要排除掉NULL(空值),那代码要做如下的改动:

ALTERTABLEdbo.Payroll
 

WITHNOCHECKADDCONSTRAINTCK_Payroll_SalaryType

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

andSalaryTypeisnotNULL);

另一个选择是将SalaryType列设置为一个NOTNULL字段,这样之后就不用再创建一个检查约束了,但你会获得一个不能向表中插入NULL值的错误消息。

通过检查约束进行数据验证

使用检查约束后,可以确保你的数据库只包括通过了检查的数据,这样允许你让数据库引擎控制你的数据有效性,这样做之后,你的应用程序就不用再进行数据验证了,否则程序代码中到处都穿插有数据校验的脚本,通过这种方法使数据验证工作更轻松,更简洁。

上一页  1 2 3 4 5 

Tags:使用 检查 约束

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