使用CHECK约束执行业务规则_SQL SERVER数据库_黑客防线网安服务器维护基地--Powered by WWW.RONGSEN.COM.CN

使用CHECK约束执行业务规则[组图]

作者:黑客防线网安SQL维护基地 来源:黑客防线网安SQL维护基地 浏览次数:0

本篇关键词:规则组图业务执行
黑客防线网安网讯:  如果你不熟悉CHECK约束,那么习惯上它们通过限制插入到一个字段中的值来执行字段域完整性。我发现CHECK约束很不幸地被用于大多数的数据模型中。在大多数的案例中,我看到使用触发器来执...

  如果你不熟悉CHECK约束那么习惯上它们通过限制插入到一个字段中的值来执行字段域完整性我发现CHECK约束很不幸地被用于大多数的数据模型中在大多数的案例我看到使用触发器来执行业务规则,而这本来是应该用一个CHECK约束来执行的。我个人使用CHECK而不是触发器是基于很多个原因的。首先,我不需要浪费时间来写专门的代码。另外,CHECK约束是在数据库修改通过数据库引擎完成之前执行的,然而触发器是事故发生后检查的。使用触发器延长了一个事务的生命,如果检测到一个回滚事件那么代价可能是昂贵的。

  SQL Server允许你定义检查单独字段完整性的字段级别的CHECK约束。此外,SQL Server允许你使用一个表级别CHECK约束来检查多个字段的值。虽然它们被归类为表级别约束,但是这些CHECK约束的类型实际上是在行级别上检查的。最后,CHECK约束通过检查一个定义好的情形来看它的值为TRUE还是FALSE。

  让我们来看看一些例子。我将建立一张示例表EMPLOYEE。作为表定义的一部分,我们将执行一个公司规则:在我们的系统中没有一个员工被允许赚取超过$100,000或者少于$30,000。

   CREATE TABLE DBO.EMPLOYEE
  (
  EMPLOYEEID INT IDENTITY(1,1) NOT NULL,
  FIRSTNAME VARCHAR(50) NOT NULL,
  LASTNAME VARCHAR(50) NOT NULL,
  IS_MANAGER BIT NULL,
  SALARY MONEY NOT NULL,
  BONUSPCT FLOAT NOT NULL
  )
  GO
  ALTER TABLE DBO.EMPLOYEE
  ADD CONSTRAINT PK_EMPLOYEE PRIMARY KEY (EMPLOYEEID)
  GO
  ALTER TABLE DBO.EMPLOYEE
  ADD CONSTRAINT DF_EMPLOYEE_BONUSPCT DEFAULT 0.00 FOR BONUSPCT
  GO
  ALTER TABLE DBO.EMPLOYEE
  ADD CONSTRAINT CK_EMPLOYEE_SALARY CHECK (SALARY BETWEEN 30000 AND 100000)
  GO
  EXEC SP_HELPCONSTRAINT EMPLOYEE
  GO

  查看我们表中的约束,我们看到我们简单的字段级别约束已经定义好了:

图一

  尝试把值插入到SALARY字段超出了我们定义的范围,这也被我们的数据库引擎成功捕捉到了。

  INSERT INTO DBO.EMPLOYEE (FIRSTNAME, LASTNAME, SALARY)

  SELECT 'GEORGE', 'WASHINGTON', 110000

  GO

图二

    黑客防线网安服务器维护方案本篇连接:http://www.rongsen.com.cn/show-9733-1.html
网站维护教程更新时间:2012-03-21 02:24:41  【打印此页】  【关闭
我要申请本站N点 | 黑客防线官网 |  
专业服务器维护及网站维护手工安全搭建环境,网站安全加固服务。黑客防线网安服务器维护基地招商进行中!QQ:29769479

footer  footer  footer  footer