资源描述:
《在sql server中使用检查约束来验证数据--》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、在SQLServer中使用检查约束来验证数据>> 什么是检查约束? 检查约束是一个规则,它确认一个SQLServer表中某条记录中的数据可接受的字段值。检查约束帮助执行域完整性。域完整性定义了一个数据库表中字段的有效值。检查约束可以验证一个单独字段或一些字段的域完整性。你对一个单独的字段可以有多个检查完整性。如果被插入或更新的数据违反了一个检查约束,那么数据库引擎将不允许这个插入或更新的操作发生。 检查约束包括一个逻辑表达式,用以确认什么是有效的表达式。逻辑表达式可能是一个单独的表达式比如Salary<200000.00,或多个表
2、达式,比如RentalDate>GETDATE()andRentalDate<DATEADD(YY,1,GETDATE())。如果一个逻辑表达式的一个检查约束返回了FALSE值,那么这个检查约束将限制这个表中数据插入或更新。对于逻辑表达式返回的是FALSE以外的值的所有记录将通过这个检查约束并允许记录被更新或插入。为了这个记录能够被插入或更新,与给定INSERT或UPDATE语句相关的所有数据都不能进行检查约束失败(返回一个FALSE值)。检查约束可以在字段级别或表级别被创建。 在一个CREATETABLE语句上创建检查约束
3、创建检查约束的一个方法是在表创建时进行。这是一个简单的CREATETABLE脚本,它创建了一个单独的检查约束: CREATETABLEdbo.Payroll ( IDintPRIMARYKEY, PositionIDINT, SalaryTypenvarchar(10), Salarydecimal(9,2) CHECK(Salary<150000.00) ); 这里我有一个CHECK子句,它与Salary字段关联。这是一个字段级别的约束。如果你创建一个字段级别的约束,那么你在你的检查约束的逻辑表达式中只能使用
4、这个字段名称。这个检查约束只允许Salary字段低于$150,000.00。当我的表创建之后,这个CHECK约束也将被创建,并被赋予一个系统生成的约束名称。如果你想在一个CREATETABLE操作期间命名你的检查约束,那么你可以运行下面的代码: CREATETABLEdbo.Payroll ( IDintPRIMARYKEY, PositionIDINT, SalaryTypenvarchar(10), Salarydecimal(9,2) CONSTRAINTCK_Payroll_SalaryCHECK(Salary<
5、;150000.00) ); 这里我命名了我的检查约束CK_Payroll_Salary。 上面的每个例子都创建了一个单独的条件字段检查约束。一个检查约束表达式可以有多个条件。下面是一个例子,它显示了一个有多个条件的检查约束: CREATETABLEdbo.Payroll ( IDintPRIMARYKEY, PositionIDINT, SalaryTypenvarchar(10), Salarydecimal(9,2) CONSTRAINTCK_Payroll_Salary CHECK(Salary>
6、10.00andSalary<150000.00) ); 记住,为了让SQLServer拒绝一条记录,这个检查约束的逻辑表达式的最终结果需要是FALSE。因此,在这个例子中,这个检查约束验证了一个Salary大于$10.00并小于$150,000.00。当这个检查约束中的这些条件中的任何一个为FALSE,那么在Payroll表中将不会插入或更新一条记录,并会显示一个错误信息。 如果你想创建一个表级别的检查约束,那么你可以运行下面的代码: CREATETABLEdbo.Payroll ( IDintPRIMARYKEY
7、, PositionIDINT, Salarydecimal(9,2), SalaryTypenvarchar(10), CHECK(Salary>10.00andSalary<150000.00) ); 这里我创建了一个单独的表约束,它检查Salary字段,但是它不是关联到字段,而是关联到这个表。在这个检查约束中我可以使用我的表中的任何字段,只要我想,因为它是一个表检查约束,但是在我的例子中,我只使用了Salary字段。注意,这个CHECK子句将使得SQLServer生成一个检查约束名称,因为我没有给这个约束名称。
8、 在一个现有的表上创建一个检查约束 有时,在你设计和创建了一个表后,你想对一个表添加一个检查约束。这可以通过使用ALTERTABLE语句来完成。下面是这么做的例子