SQL Server 中规则的使用

规则的概念:

规则( Rules )是用于执行一些与检查约束相同的功能。检查约束比规则更简明,一个列只能应用一个规则,但是却可以应用多个检查约束。
检查约束可以在 CREATE TABLE 语句中定义,而规则作为独立的对象创建,然后绑定在指定的列上。
规则也是维护数据库中数据完整性的一种手段,使用它可以避免表中出现不符合逻辑的数据,例如工资小于 0


创建规则:

使用CREATE RULE语句可以创建规则,其语法结构如下:

CREATERULE <架构名>.<规则名>

AS<规则表达式>

规则表达式中可以包含算术运算符、关系运算符和谓词(例如INLIKEBETWEEN等)。

例:

创建一个规则SexRule,指定变量@sex的取值只能为'男'或'女',代码如下

CREATERULE SexRule

AS@sex IN ('', '')

例:

创建一个规则WageRule,指定变量@wage的取值范围为0~50000,代码如下:

CREATERULE WageRule

AS@wage BETWEEN 0 AND 50000


绑定规则:

绑定规则是指将已经存在的规则应用到列或用户自定义的数据类型中。使用存储过程 sp_bindrule 可以将规则绑定到列或用户自定义的数据类型,语法如下:

sp_bindrule [ @rulename = ]规则名,

[ @objname = ]对象名

例:

规则 SexRule 绑定到表 Employees 的列 Sex 上的语句如下:

USE HrSystem

GO

EXECsp_bindrule 'SexRule', 'Employees.Sex'

GO

执行的结果如下:

已将规则绑定到表的列。

例:

下面通过一个INSERT语句验证规则的应用效果。执行下面的INSERT语句,向表Employees中插入一条记录。

USEHrSystem

GO

INSERTINTO Employees (Emp_name, Sex, Title, Wage,IdCard,Dep_id)

VALUES('小李', '', '职员', 10000, '110123xxxx', 1)

GO

注意, INSERT 语句设置列 Sex 的值为 。因为列 Sex 绑定到规则 SexRule ,而在规则 SexRule 中规定列值只能是 。因此,执行 INSERT 语句的结果如下:

消息513,级别16,状态0,第2

列的插入或更新与先前的CREATE RULE语句所指定的规则发生冲突。该语句已终止。冲突发生于数据库'HrSystem',表'dbo.Employees',列'Sex'

语句已终止。

返回结果中提示 INSERT 语句中指定的列 Sex 的指定值( ' ' )不满足之前绑定的规则。


解除规则绑定:

使用存储过程 sp_unbindrule 可以解除规则的绑定,它的基本语法如下:

sp_unbindrule[ @objname = ]对象名

对象名可以是表名和列名,也可以是自定义的数据类型。

例:

使用存储过程sp_unbindrule取消表Employees的列Sex上绑定的规则,具体语句如下:

USE HrSystem

GO

EXECsp_unbindrule 'Employees.Sex'

GO

执行的结果如下:

(所影响的行数为1 行)

已从表的列上解除了规则的绑定。


删除规则:

SQL Server Management Studio 中,右键单击指定的规则,在弹出菜单中选择 删除 项则删除指定的规则对象。
也可以使用 DROP RULE 语句从当前数据库中删除一个或多个规则,语法如下:

DROPRULE 规则名1 [,规则名2, ...,规则名n]

在删除规则前,需要调用 sp_unbindrule 存储过程解除该规则的绑定。
例:

使用DROP RULE删除规则SexRule,具体语句如下:

USE HrSystem

EXECsp_unbindrule 'Employees.Sex'

DROPRULE SexRule




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值