




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、默认和规则Default and Rule,默 认 Default,默认也是一种数据库对象,它可以实现一种与默认值约束功能相似的数据完整性检测功能。 当程序使用INSERT语句插入数据时,它可以为数据库中的数据表提供默认数据。 对于一个具体的数据表来说,默认对象所执行的功能与默认值约束完全一样。但默认值约束是与一个数据表相联系的,其作用范围仅限于所在的数据表。而默认对象则是独立于数据表而创建的,只有将其应用于一个数据表时,才对所应用的数据起作用。,默 认 Default,默认值约束是在使用 CREATE TABLE 或 ALTER TABLE 语句定义数据表时定义,它与表定义存储在一起。所以在
2、删除数据表时,默认值约束也被自动删除。 而默认对象则需要使用 DEFAULT 语句定义,它作为一种数据库对象而独立存在。默认对象可以被多次应用不同的数据表,不同的列或用户定义数据类型。即使被其作用的数据被删除,也不能删除默认对象,而需要使用专门的语句来删除。,使用企业管理器创建默认对象,展开需要创建默认对象的数据库; 右键单击“DEFAULT”; 选择“New Default”菜单; 在“Default Properties”对话框的“Name”中输入默认对象的名称,在“Value”中输入默认值; 单击“确定”。,使用T-SQL语句创建默认对象,格式为:CREATE DEFAULT 默认值名
3、AS 常数表达式 默认值名称必须符合标识符的规则。 常数表达式是指只包含常量值的表达式(不能包含任何列或其他数据库对象的名称)。可以使用任何常量、内置函数或数学表达式。字符和日期常量用单引号()引起来;货币、整数和浮点常量不需要使用引号。二进制数据必须以 0 x 开头,货币数据必须以美元符号($)开头。默认值必须与列数据类型兼容。,【例】创建字符默认值 男。,use student go create default ssex as 男 go CREATE DEFAULT 语句只能在当前数据库中创建默认。对每个用户来说,在同一个数据库中创建的默认值的名称必须保持惟一。,应用默认对象(企业管理器
4、),展开需要创建默认对象的数据库; 在对象上右键单击“属性”; 单击“Default Properties”对话框的“Bind Columns”按钮; 单击“Bind Default to Columns”对话框的“Table”下拉按钮,选择数据表; 在“Unbound columns”栏中选择需要绑定的列; 单击“Add”按钮; 单击“确定”。,应用默认对象(T-SQL语句),使用sp_bindefault将默认值绑定到列或用户定义的数据类型。 语法格式为: sp_bindefault defname = 默认值名 , objname = 对象名 , futureonly = futureo
5、nly_flag 参数defname = default是由CREATE DEFAULT 语句创建的默认名称。,应用默认对象(T-SQL语句),对象名是指要绑定默认值的表和列名称或用户定义的数据类型。 如果对象名没有采取table.column形式,则认为它属于用户定义数据类型。 默认情况下,用户定义数据类型的现有列继承default,除非默认值直接绑定到列中。 默认值无法绑定到timestamp数据类型的列、带IDENTITY属性的列或者已经有DEFAULT约束的列。,应用默认对象(T-SQL语句),futureonly_flag仅在将默认值绑定到用户定义的数据类型时才使用。 其值为NULL
6、时,说明将表中该用户定义数据类型列的默认值设置为当前默认对象之值。 其值为futureonly时,说明当前所应用的默认对象不影响表中已存在的用户定义数据类型列的默认值,而只对以后插入行产生影响。,【例】将默认值绑定到列。,假定已经用CREATE DEFAULT语句在当前数据库中定义了名为Chengji的默认值,此示例将默认值绑定到 SC表的Grade列。当将行添加到SC 表而且没有提供Grade列的数据时,列取得默认值 Chengji的值。 exec sp_bindefault Chengji, SC.Grade go,【例】将默认值绑定到用户定义的数据类型。,假定存在名为def_ssn的默认
7、值和名为ssn的用户定义数据类型,此例将默认值def_ssn绑定到用户定义的数据类型 ssn中。在创建表时,所有指派了用户定义数据类型ssn的列都将继承默认值。类型ssn的现有列也继承默认值 def_ssn,除非为futureonly_flag值指定了futureonly,或者在列上直接绑定了默认值。绑定到列的默认值始终优先于绑定到数据类型的默认值。 exec sp_bindefault def_ssn, ssn go,【例】使用 futureonly_flag。,此示例将默认值def_ssn绑定到用户定义的数据类型 ssn。因为已指定futureonly,所以不影响类型ssn 的现有列。 e
8、xec sp_bindefault def_ssn, ssn, futureonly go,解除绑定(企业管理器),如果不再需要默认值的应用,则可以使用系统存储过程sp_unbindefault解除默认值与列和用户定义数据类型之间的关联。 如果要删除某个默认值,则首先要解除此默认值的一切绑定。 无论是列还是用户定义数据类型,只能同时关联一个默认值,当关联新的默认值时,旧的关联自动删除。,解除绑定(企业管理器),展开需要删除默认对象的数据库; 在对象上右键单击“属性”; 单击“Default Properties”对话框的“Bind Columns”按钮; 单击“Bind Default to
9、Columns”对话框的“Table”下拉按钮,选择数据表; 在“Unbound columns”栏中选择需要解除绑定的列; 单击“Remove”按钮; 单击“确定”。,解除绑定(T-SQL语句),使用sp_unbindefault在当前数据库中为列或用户定义数据类型解除默认值绑定。 语法格式为: sp_unbindefault objname = 对象名 , futureonly = futureonly_flag 对象名是要解除默认值绑定的表和列或者用户定义数据类型的名称。 futureonly = futureonly_flag仅用于解除用户定义数据类型默认值的绑定。 设置为future
10、only时,现有的属于该数据类型的列不会失去指定的默认值。,【例】为列解除默认值绑定。 为表 employees 的 hiredate 列解除默认值绑定。 exec sp_unbindefault employees.hiredate 【例】为用户定义数据类型解除默认值绑定。 为用户定义数据类型 ssn 解除默认值绑定。这将为该数据类型的现有列和将来的列解除绑定。 exec sp_unbindefault ssn 【例】使用 futureonly_flag。 为用户定义数据类型 ssn 解除默认值绑定,现有的 ssn 列不受影响。 exec sp_unbindefault ssn, futur
11、eonly,删除默认值(企业管理器),右键单击默认对象; 单击“删除” 按钮; 单击“Drop Object”对话框的“Drop All”按钮。,删除默认值,使用DROP DEFAULT从当前数据库中删除一个或多个用户定义的默认值。 语法格式为: DROP DEFAULT 默认值名 ,.n ,【例】除去默认值。,如果默认值没有绑定到列或用户定义的数据类型,可以很容易地使用DROP DEFAULT将其除去。如下为删除用户创建的名为datedflt的默认值。 use pubs go if exists (select name from sysobjects where name = datedf
12、lt and type = d) drop default datedflt,【例】除去绑定到列的默认值。,解除绑定与authors表中phone列关联的默认值,然后除去名为phonedflt的默认值。 use pubs go if exists (select name from sysobjects where name = phonedflt and type = d) begin exec sp_unbindefault authors.phone drop default phonedflt end,规 则 Rule,规则也是一种数据库对象,它可以实现一种与CHECK约束功能相似的数
13、据完整性检测功能。 规则是对录入到列中的数据所实施的完整性约束条件,指定插入到列中的可能值。 CHECK约束是与一个数据表相联系的,而规则对象则是独立于数据表而创建的。 规则可以被关联到一列或几列,及用户定义的数据类型。 每列或每个用户定义数据类型只能同时关联一个规则。,创建规则对象(企业管理器),展开需要创建规则对象的数据库; 右键单击“Rules”; 选择“New Rule”菜单; 在“Rule Properties”对话框的“Name”中输入规则对象的名称,在“Text”中输入规则值; 单击“确定”。,创建规则对象(T-SQL语句),语法格式为: CREATE RULE 规则名 AS 条
14、件表达式 条件表达式是定义规则的条件,可以是 WHERE 子句中任何有效的表达式,并且可以包含诸如算术运算符、关系运算符和谓词(如 IN、LIKE、BETWEEN)之类的元素。 规则不能引用列或其他数据库对象。可以包含不引用数据库对象的内置函数。,条件表达式包含一个变量,每个局部变量的前面都有一个符号。 该表达式引用通过 UPDATE 或 INSERT 语句输入的值。 在创建规则时,可以使用任何名称或符号表示值,但第一个字符必须是 符号。,创建规则对象(T-SQL语句),【例】创建一个规则,用以限制插入该规则所绑定的列中的整数范围。 create rule range_rule as rang
15、e = $1000 and range $20000 【例】创建一个规则,用以将输入到该规则所绑定的列中的实际值限制为只能是该规则中列出的值。 create rule list_rule as list in (1389, 0736, 0877),应用规则对象(企业管理器),展开需要创建规则对象的数据库; 在对象上右键单击“属性”; 单击“Rule Properties”对话框的“Bind Columns”按钮; 单击“Bind Rule to Columns”对话框的“Table”下拉按钮,选择数据表; 在“Unbound columns”栏中选择需要绑定的列; 单击“Add”按钮; 单击“
16、确定”。,应用规则对象(T-SQL语句),规则创建后,需要将其捆绑到列上或用户自定义的数据类型上,当向捆绑了规则的列或使用捆绑了规则的用户自定义数据类型的所有列插入或更新数据时,新的数据必须符合规则。 语法格式为: sp_bindrule rulename = 规则名 , objname = 对象名 , futureonly = futureonly_flag ,对象名是要绑定规则的表和列或者用户定义数据类型的名称。 如果对象名没有采取table.column形式,则认为它属于用户定义数据类型。 默认情况下,用户定义数据类型的现有列继承rule,除非规则直接绑定到列中。,应用规则对象(T-SQ
17、L语句),futureonly_flag仅当将规则绑定到用户定义的数据类型时才使用。 futureonly_flag 的数据类型为 varchar(15),默认值为 NULL。将此参数在设置为 futureonly 时,它会防止用户定义数据类型的现有列继承新规则。 如果 futureonly_flag 为 NULL,那么新规则将绑定到用户定义数据类型的每一列,条件是此数据类型当前无规则或者使用用户定义数据类型的现有规则。,应用规则对象(T-SQL语句),【例】将规则绑定到列。,假设已经用 CREATE RULE 语句在当前数据库中创建名为today的规则,此示例将规则绑定到 employees
18、表的hire date列。将行添加到employees 时,按照today 规则检查hire date列的数据。 exec sp_bindrule today, employees.hire date go,【例】将规则绑定到用户定义的数据类型。,假设存在规则rule_ssn和名为ssn的用户定义数据类型,此示例将rule_ssn绑定到ssn。在CREATE TABLE语句中,类型ssn的列继承rule_ssn规则。类型 ssn的现有列也继承rule_ssn规则,除非为 futureonly_flag指定了futureonly 或者在ssn 上直接绑定了规则。绑定到列的规则始终优先于绑定到数据
19、类型的规则。 exec sp_bindrule rule_ssn, ssn go,【例】使用 futureonly_flag。,此示例将 rule_ssn 规则绑定到用户定义数据类型 ssn。因为已指定 futureonly,所以不影响类型 ssn 的现有列。 exec sp_bindrule rule_ssn, ssn, futureonly go,解除绑定(企业管理器),展开需要删除规则对象的数据库; 在对象上右键单击“属性”; 单击“Rule Properties”对话框的“Bind Columns”按钮; 单击“Bind Rule to Columns”对话框的“Table”下拉按钮,选择数据表; 在“Bound columns”栏中选择需要解除绑定的列; 单击“Remove”按钮; 单击“确定”。,解除绑定(T-SQL语句),使用sp_unbindrule在当前数据库中为列或用户定义数据类型解除规则绑定。 语法格式为: sp_unbindrule objname = 对象名 , fut
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 上海华东师大三附中2025年化学高一下期末监测试题含解析
- 智能个性化治疗-洞察及研究
- 2025届黑龙江省哈尔滨市阿城区二中高一化学第二学期期末达标检测试题含解析
- 经济效益评估-第1篇-洞察及研究
- 2025届湖南浏阳一中、株洲二中等湘东五校化学高二下期末学业水平测试试题含解析
- 北京顺义牛栏山一中2025年化学高一下期末质量跟踪监视模拟试题含解析
- 散射特性在生物医学中的应用-洞察阐释
- 采矿技术与效率提升研究-洞察阐释
- 肾小管间质疾病与遗传易感性-洞察阐释
- 高速伐木磨损特性研究-洞察及研究
- 2025年医保知识考试题库及答案:医保信息化建设应用法律法规试题
- 环境现场采样培训
- 2025年 汕头市公安局警务辅助人员招聘考试笔试试卷附答案
- 脑出血的护理查房
- 天津大学强基计划校测面试题
- 2025年大学思想政治理论课程考试试卷及答案
- 合同的内容讲课件
- 2025年农村经济与管理考试试题及答案
- 夏季安全生产试题及答案
- 心身疾病病例分享
- XX公司年产10万吨阳极铜及5万吨铜杆项目环境影响报告书
评论
0/150
提交评论