MSSQL 规则与默认

时间:2022-01-05 06:56:49

1、规则

1.1规则的概念:

规则(Rule) 就是数据库中对存储在表的列或用户自定义数据类型中的值的规定和限制。规则是单独存储的独立的数据库对象。规则与其作用的表或用户自定义数据类型是相互独立的,即表或用户自定义对象的删除、修改不会对与之相连的规则产生影响。规则和约束可以同时使用,表的列可以有一个规则及多个CHECK 约束。规则与CHECK 约束很相似,都可以执行一些与检查约束相同的功能。但检查约束比规则更简明,一个列只能应用一个规则,但是却可以应用多个检查约束,相比之下,使用在ALTERTABLE 或CREATE TABLE 命令中的CHECK 约束是更标准的限制列值的方法,但CHECK 约束不能直接作用于用户自定义数据类型。规则也是维护数据库中数据完整性的一种手段,使用它可以避免表中出现不符合逻辑的数据,例如工资小于0、性别出现非男非女等。

1.2 规则的创建语法

使用CREATE RULE语句可以创建规则,其语法结构如下:
CREATERULE <架构名>.<规则名>
AS<规则表达式> //规则表达式中可以包含算术运算符、关系运算符和谓词(例如IN、LIKE、BETWEEN等)。

1.2.1 例子:

1:  
创建一个规则SexRule,指定变量@sex的取值只能为'男''女',代码如下:  
CREATERULE SexRule  
AS@sex IN ('男', '女')  
例2:  
创建一个规则WageRule,指定变量@wage的取值范围为0~50000,代码如下:  
CREATERULE WageRule  
AS@wage BETWEEN 0 AND 50000  

1.3创建了规则之后,还需要绑定到指定的数据列

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

1.3.1例子:

例:  
规则SexRule绑定到表Employees的列Sex上的语句如下:  
USE HrSystem  
GO  
EXEC ***sp_bindrule*** 'SexRule', 'Employees.Sex'  
GO 
测试规则SexRule:
例:(必须先绑定)  
下面通过一个INSERT语句验证规则的应用效果。执行下面的INSERT语句,向表Employees中插入一条记录。 USE HrSystem 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的指定值('无')不满足之前绑定的规则。 

1.4 因为规则是独立的数据库对象,即使删除掉了数据表也不会影响到规则,所以需要取消指定列的规则,还得自己解除绑定(注意仅仅是取消绑定关系)

1.4.1解除绑定规则语法:

解除规则绑定:
使用存储过程sp_unbindrule可以解除规则的绑定,它的基本语法如下:
sp_unbindrule [ @objname = ]对象名
对象名可以是表名和列名,也可以是自定义的数据类型。

1.4.2例子:

例:  
使用存储过程***sp_unbindrule***取消表Employees的列Sex上绑定的规则,具体语句如下:  
USE HrSystem  
GO  
EXEC ***sp_unbindrule*** 'Employees.Sex'  
GO  
执行的结果如下:  
(所影响的行数为1 行)  
已从表的列上解除了规则的绑定。  

1.5 删除规则前必须先解除绑定

1.5.1删除语法:

在SQL Server Management Studio中,右键单击指定的规则,在弹出菜单中选择“删除”项则删除指定的规则对象。  
也可以使用DROP RULE语句从当前数据库中删除一个或多个规则,语法如下:  
DROP RULE 规则名1 [,规则名2, ...,规则名n]  
在删除规则前,需要调用***sp_unbindrule***存储过程解除该规则的绑定。  

1.5.2例子:

使用DROP RULE删除规则SexRule,具体语句如下: USE HrSystem EXEC ***sp_unbindrule*** 'Employees.Sex' DROPRULE SexRule 

2使用默认

默认是一种数据库对象与默认约束功能上一样,但是区别在于默认约束都是在Create Table或者Alter Table中建立的被嵌入了表单结构,即删除表单时候默认约束也被删除了,而默认作为一种单独的数据库对象独立于表外,删除表并不能删除需要调用Drop Default删除默认,

2.1创建默认使用的语句是 Create Default : ***Create Default*** default_name As constant_expression//只能包含常量值的表达式 **例:在BookImfo数据库里创建adress_default的默认** Create Default adress_default As ‘GXNN’ **绑定默认,因为是独立于表之外的所以使用之前必须使用系统存储过程*sp_bindefault*进行绑定。** 例:绑定到BookImfo里的BookStore里的address字段 Use BookImfo Exec sp_bindefault ‘adress_default’‘BookStore.address’ 删除默认,语法类似绑定只是调用存储过程换为sp_unbindefault