SQL Server数据库技术(53)[MSSQL防范]
本文“SQL Server数据库技术(53)[MSSQL防范]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
法则(Rule) 就是数据库中对存储在表的列或用户自定义数据范例中的值的规定和限制.法则是单独存储的独立的数据库对象.法则与其作用的表或用户自定义数据范例是彼此独立的,即表或用户自定义对象的删除、改正不会对与之相连的法则产生影响.法则和约束可以同时利用,表的列可以有一个法则及多个CHECK 约束.法则与CHECK 约束很类似,相比之下,利用在ALTERTABLE 或CREATE TABLE 号令中的CHECK 约束是更尺度的限制列值的办法,但CHECK 约束不能直接作用于用户自定义数据范例.
9.2.1 成立法则
(1) 用CREATE RULE 号令成立法则
CREATE RULE 号令用于在当前数据库中成立法则,其语法以下:
CREATE RULE rule_name AS condition_expression
此中condition_expression 子句是法则的定义.condition_expression 子句可以是能用于WHERE 条件子句中的任何表达式,它可以包含算术运算符、关系运算符和谓词(如IN、LIKE、 BETWEEN 等).
注意:condition_expression子句中的表达式必须以字符"@"开首.
(2) 用Enterprise Manager 成立法则
在Enterprise Manager 中挑选数据库对象"Rules",单击右键从快速菜单中挑选"NewRule"选项,即会弹出如图9-1 所示的成立法则属性对话框.输入法则名称和表达式之后,单击"肯定"按钮,即完陈法则的成立.
9.2.2 查见解则
(1) 用Enterprise Manager 查见解则
在Enterprise Manager 中挑选"Rules" 对象,便可从右边的任务板中看到法则的大部份信息,包含法则的名称、全部者、成立时间,等如图9-2 所示.在sql server 2000 中不像7.0 版本可以直接在任务板中看到法则的表达式,这需求查见解则的属性.可以挑选要查看的法则,单击右键,从快速菜单中挑选"Properties" 选项,即会呈现如图9-3 所示的对话框,可以从中编辑法则的表达式.改正法则的名称可以通过Sp_rename 系统存储历程举行,也可以直接在图9-2 顶用右键单击要改正的法则,从快速菜单中挑选"重命名(Rename)" 菜单项,举行名称改正.
(2) 用存储历程Sp_helptext 查见解则
利用Sp_helptext 存储历程可以查见解则的细节,其语法以下:
sp_helptext [@objname =] 'name'
此中[@objname =] 'name'子句指明对象的名称,用Sp_helptext 存储历程查看的对象可
以是当前数据库中的法则、缺省值、触发器、视图或未加密的存储历程.
例9-5: 查见解则hire_date_rule.
exec sp_helptext hire_date_rule
运行后果以下:
Text
--------------------------------------------------------------------------------------
create rule hire_date_rule
as @hire_date >= '1980-01-01' and @hire_date <= getdate()
9.2.3 法则的绑定与松绑
成立法则后,法则仅仅只是一个存在于数据库中的对象,并未发生作用.需求将法则与数据库表或用户自定义对象接洽起来,才能到达成立法则的目的.接洽的办法称为"绑定".所谓绑定就是指定法则作用于哪个表的哪一列或哪个用户自定义数据范例.表的一列或一个用户自定义数据范例只能与一个法则相绑定,而一个法则可以绑定多对象,这恰是法则的魅力所在.解除法则与对象的绑定称为"松绑".
(1) 用存储历程Sp_bindrule 绑定法则
存储历程Sp_bindrule 可以绑定一个法则到表的一个列或一个用户自定义数据范例上.其语法以下:
sp_bindrule [@rulename =] 'rule',
[@objname =] 'object_name'
[, 'futureonly']
各参数阐明以下:
[@rulename =] 'rule'
指定法则名称.
[@objname =] 'object_name'
指定法则绑定的对象.
'futureonly'
此选项仅在绑定法则到用户自定义数据范例上时才可以利用.当指定此选项时,仅今后利用此用户自定义数据范例的列会利用新法则,而当前已经利用此数据范例的列则不受影响.
例9-6: 绑定法则hire_date_rule 到用户自定义数据范例hire_date 上.
exec sp_bindrule hire_date_rule, hire_date
运行后果以下:
Rule bound to data type.
The new rule has been bound to column(s) of the specified user data type.
例9-7: 绑定法则hire_date_rule 到用户自定义数据范例hire_date 上,带'futureonly'选项.
exec sp_bindrule hire_date_rule, hire_date, 'futureonly'
运行后果以下:
Rule bound to data type.
例9-8: 绑定法则my_rule 到orders 表的字段order_id.
exec sp_bindrule id_rule, 'orders.[order_id]'
运行后果以下:
Rule bound to table column.
注意:法则对已经输入表中的数据不起作用.
法则所指定的数据范例必须与所绑定的对象的数据范例一致,且法则不能绑定一个数据范例为TEXT、MAGE或TIMESTAMP的列.
与表的列绑定的法则优先于与用户自定义数据范例绑定的列,因此,假如表的列的数据范例与法则A绑定,同时列又与法则B绑定,则以法则B为列的法则.
你可以直接用一个新的法则来绑定列或用户自定义数据范例,而不需求先将其本来绑定的法则解除,系统会将早班法则覆盖.
(2)用存储历程Sp_unbindrule 解除法则的绑定
存储历程Sp_unbindrule 可解除法则与列或用户自定义数据范例的绑定,其语法以下:
sp_unbindrule [@objname =] 'object_name'
[,'futureonly']
此中'futureonly'选项同绑按时一样,仅用于用户自定义数据范例,它指定现有的用此用户自定义数据范例定义的列仍旧保持与此法则的绑定.假如不指定此项,全部由此用户自定义数据范例定义的列也将随之解除与此法则的绑定.
例9-9: 解除法则hire_date_rule 与用户自定义数据范例birthday 的绑定,带'futureonly'
选项.
exec sp_unbindrule birthday, 'futureonly'
运行后果以下:
(1 row(s) affected)
Rule unbound from data type.
(3) 用Enterprise Manager 管理法则的绑定
在Enterprise Manager 中,挑选要举行绑定设置的法则,单击右键,从快速菜单中挑选"Properties" 选项,即会呈现如图9-3 所示的法则属性对话框.图中的"Bind UDTs…"按钮用于绑定用户自定义数据范例,"Bind Columns…" 按钮用于绑定表的列.
在图9-3 中单击"Bind UDTs…" 按钮,则呈现如图9-4 所示的绑定法则到用户自定义数据范例的对话框;单击"Bind Columns…" 按钮,则呈现如图9-5 所示的绑定法则到表的列的对话框.
9.2.4 删除法则
可以在Enterprise Manager 中挑选法则,单击右键,从快速菜单中挑选"Delete" 选项删除法则,也可以利用DROP RULE 号令删除当前数据库中的一个或多个法则.其语法以下:
DROP RULE {rule_name} [,...n]
注意:在删除一个法则前,必须先将与其绑定的对象解除绑定.
例9-10: 删除多个法则
drop rule mytest1_rule,mytest2_rule
本文地址: | 与您的QQ/BBS好友分享! |