转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 数据库 >> Sql Server >> 正文
在ERwin中建立域所涉及到的SQL2000的相关知识         

在ERwin中建立域所涉及到的SQL2000的相关知识

作者:闵涛 文章来源:闵涛的学习笔记 点击数:2220 更新时间:2007/11/14 12:23:07


将规则/默认值绑定到用户定义数据类型
使用此对话框查看或指定下列选项。

选项
规则

查看希望绑定到用户定义的数据类型的规则名。当绑定到列或用户定义数据类型时,规则将指定可以插入到列中的可接受的值。规则是一种向后兼容的功能,执行一些与检查约束相同的功能。CHECK 约束是使用 ALTER 或 CREATE TABLE 的 CHECK 关键字创建的,是对列中的值进行限制的首选标准方法(可以对一列或多列定义多个约束)。列或用户定义数据类型只能有一个绑定的规则。但是,列可以同时具有规则和一个或多个与其关联的检查约束。在这种情况下,将检查所有限制。有关规则的更多信息,请参见 CREATE RULE。

规则
规则是一个向后兼容的功能,用于执行一些与 CHECK 约束相同的功能。CHECK 约束是用来限制列值的首选标准方法。CHECK 约束比规则更简明,一个列只能应用一个规则,但是却可以应用多个 CHECK 约束。CHECK 约束作为 CREATE TABLE 语句的一部分进行指定,而规则以单独的对象创建,然后绑定到列上。

下例创建一个规则,执行与前面主题中的 CHECK 约束示例相同的功能。Microsoft® SQL Server™ 2000 首选的方法是 CHECK 约束。

CREATE RULE id_chk AS @id BETWEEN 0 and 10000
GO
CREATE TABLE cust_sample
   (
   cust_id            int
   PRIMARY KEY,
   cust_name         char(50),
   cust_address         char(50),
   cust_credit_limit   money,
   )
GO
sp_bindrule id_chk, ''''cust_sample.cust_id''''
GO

名称

查看用户定义的数据类型的名称和数据类型。通过选中"绑定"框选择要绑定的每个规则。选择"仅将来"框会防止现有用户定义数据类型列继承新规则。如果选定"仅将来"框,新规则将绑定到当前没有规则或使用现有用户定义数据类型规则的任何用户定义数据类型列。有关绑定规则的更多信息,请参见 sp_bindrule。

一、CREATE RULE
创建称为规则的对象。当绑定到列或用户定义数据类型时,规则将指定可以插入到列中的可接受的值。规则是一种向后兼容的功能,执行一些与检查约束相同的功能。CHECK 约束是使用 ALTER 或 CREATE TABLE 的 CHECK 关键字创建的,是对列中的值进行限制的首选标准方法(可以对一列或多列定义多个约束)。列或用户定义数据类型只能有一个绑定的规则。但是,列可以同时具有规则和一个或多个与其关联的检查约束。在这种情况下,将检查所有限制。

语法
CREATE RULE rule
    AS condition_expression

参数
rule

是新规则的名称。规则名称必须符合标识符规则。可以选择是否指定规则所有者的名称。

condition_expression

是定义规则的条件。规则可以是 WHERE 子句中任何有效的表达式,并且可以包含诸如算术运算符、关系运算符和谓词(如 IN、LIKE、BETWEEN)之类的元素。规则不能引用列或其它数据库对象。可以包含不引用数据库对象的内置函数。

condition_expression 包含一个变量。每个局部变量的前面都有一个 @ 符号。该表达式引用通过 UPDATE 或 INSERT 语句输入的值。在创建规则时,可以使用任何名称或符号表示值,但第一个字符必须是 @ 符号。

注释
在单个批处理中,CREATE RULE 语句不能与其它 Transact-SQL 语句组合使用。规则不适用于在创建规则时已存在于数据库中的数据,而且规则不能绑定到系统数据类型。规则只能在当前的数据库中创建。创建规则后,执行 sp_bindrule 可将规则绑定到列或用户定义数据类型。

规则必须与列的数据类型兼容。规则不能绑定到 text、image 或 timestamp 列。一定要用单引号 ('''') 将字符和日期常量引起来,在二进制常量前加 0x。例如,不能将 "@value LIKE A%" 用作数字列的规则。如果规则与其所绑定的列不兼容,Microsoft® SQL Server™ 将在插入值时(而不是在绑定规则时)返回错误信息。

对于用户定义数据类型,只有尝试在该类型的数据库列中插入值,或更新该类型的数据库列时,绑定到该类型的规则才会激活。因为规则不检验变量,所以在向用户定义数据类型的变量赋值时,不要赋予绑定到该数据类型的列的规则所拒绝的值。

若要获得关于规则的报表,请使用 sp_help。若要显示某条规则的文本,请以该规则的名称作为参数来执行存储过程 sp_helptext。若要重命名规则,请使用 sp_rename。

要创建与原有规则同名的新规则,必须在创建新规则之前将原有规则除去(使用 DROP RULE),而在除去规则之前,必须首先解除绑定(使用 sp_unbindrule)。使用 sp_unbindrule 解除规则与列的绑定。

可以在不解除原有绑定的情况下将新规则绑定到列或数据类型;新规则将替代原有规则。绑定到列的规则总是优先于绑定到用户定义数据类型的规则。将规则绑定到列时,该规则将替换已经绑定到该列的用户定义数据类型的规则。但是,将规则绑定到用户定义数据类型时,该规则不会替换绑定到该数据类型的列的规则。下表显示了当将规则绑定到已经存在规则的列和用户定义数据类型时,规则生效的优先顺序。

  旧规则绑定到
新规则绑定到 用户定义数据类型 列
用户定义数据类型 旧规则被替换 没有变化
列 旧规则被替换 旧规则被替换


如果列同时有默认值和规则与之关联,则默认值必须满足规则的定义。与规则冲突的默认值永远不能插入列。每次试图插入这样的默认值时,SQL Server 都会生成错误信息。


 
说明  SQL Server 是将空字符串解释为单个空格还是真正的空字符串取决于 sp_dbcmptlevel 的设置。如果兼容级别小于或等于 65,SQL Server 就将空字符串解释为单个空格。如果兼容级别等于 70,则 SQL Server 将空字符串解释为空字符串。有关更多信息,请参见 sp_dbcmptlevel。


权限
CREATE RULE 权限默认授予 sysadmin 固定服务器角色成员和 db_ddladmin 和 db_owner 固定数据库角色成员。sysadmin、db_owner 和 db_securityadmin 角色的成员可以将权限转让给其他用户。

示例
A. 范围规则
下例创建一个规则,用以限制插入该规则所绑定的列中的整数范围。

CREATE RULE range_rule
AS
@range >= $1000 AND @range < $20000

B. 列表规则
下例创建一个规则,用以将输入到该规则所绑定的列中的实际值限制为只能是该规则中列出的值。

CREATE RULE list_rule
AS
@list IN (''''1389'''', ''''0736'''', ''''0877'''')

C. 模式规则
下例创建一个遵循这种模式的规则:任意两个字符的后面跟一个连字符和任意多个字符(或没有字符),并以 0 到 9 之间的整数结尾。

CREATE RULE pattern_rule
AS
@value LIKE ''''_ _-%[0-9]''''
二、DROP RULE从当前数据库中删除一个或多个用户定义的规则。语法DROP RULE { rule } [ ,...n ]参数rule是要删除的规则。规则名称必须符合标识符规则。有关标识符规则的更多信息,请参见使用标识符。可以选择是否指定规则所有者的名称。n是表示可以指定多个规则的占位符。注释如果规则当前绑定到列或用户定义的数据类型,若要除去规则,首先需解除绑定。使用 sp_unbindrule 解除绑定规则。如果在试图除去规则时规则是绑定的,将显示错误信息并取消 DROP RULE 语句。除去规则后,可以在以前受规则约束的列中输入新数据而不受规则的约束。现有数据不受任何影响。 DROP RULE 语句不适用于 CHECK 约束。有关除去 CHECK 约束的更多信息,请参见本卷中的"ALTER TABLE"。权限默认情况下,将 DROP RULE 权限授予规则所有者,该权限不可转让。然而,db_owner 和 db_ddladmin 固定数据库角色成员和 sysadmin 固定服务器角色成员可以通过在 DROP RULE 内指定所有者除去任何对象。示例下例解除绑定名为 pub_id_rule 的规则并将其除去。USE pubs
IF EXISTS (SELECT name FROM sysobjects
         WHERE name = ''''pub_id_rule''''
            AND type = ''''R'''')
   BEGIN
      EXEC sp_unbindrule ''''publishers.pub_id''''
      DROP RULE pub_id_rule
   END
GO


三、CREATE DEFAULT创建称为默认值的对象。当绑定到列或用户定义数据类型时,如果插入时没有明确提供值,默认值便指定一个值,并将其插入到对象所绑定的列中(或者,在用户定义数据类型的情况下,插入到所有列中)。默认值是一个向后兼容的功能,它执行一些与使用 ALTER 或 CREATE TABLE 语句的 DEFAULT 关键字创建的默认值定义相同的功能。默认值定义是限制列数据的首选并且标准的方法,因为定义和表存储在一起,当除去表时,将自动除去默认值定义。然而,当在多个列中多次使用默认值时,默认值也有其优点。语法CREATE DEFAULT default    AS constant_expression参数default默认值的名称。默认值名称必须符合标识符的规则。可以选择是否指定默认值所有者名称。constant_expression只包含常量值的表达式(不能包含任何列或其它数据库对象的名称)。可以使用任何常量、内置函数或数学表达式。字符和日期常量用单引号 ('''') 引起来;货币、整数和浮点常量不需要使用引号。二进制数据必须以 0x 开头,货币数据必须以美元符号 ($) 开头。默认值必须与列数据类型兼容。注释只能在当前数据库中创建默认值的名称。在数据库中,每个所有者的各默认值名称必须是唯一的。创建默认值后,使用 sp_bindefault 将其绑定到列或用户定义数据类型。如果默认值和其绑定到的列不兼容,则在尝试插入默认值时,Microsoft® SQL Server™ 会生成错误信息。例如,N/A 不能用作 numeric 列的默认值。如果默认值对于它所绑定的列而言太长,该值就会被截断。在单个批处理中,CREATE DEFAULT 语句不能与其它 Transact-SQL 语句组合使用。在以相同的名称创建新的默认值之前,必须除去原有的默认值,在除去前,必须通过执行 sp_unbindefault 来取消对该默认值的绑定。如果列同时有默认值和规则与之关联,则默认值不能违反规则。与规则冲突的默认值将永远不能插入列,每次试图插入这样的默认值时,SQL Server 都会生成错误信息。当绑定到列以后,在以下情况下将插入默认值: 非显式地插入值。在 INSERT 中使用 DEFAULT VALUES 或 DEFAULT 关键字来插入默认值。 如果在创建列时指定 NOT NULL 并且没有为其创建默认值,则当用户未能为该列输入项时,就会生成错误信息。下表说明默认值的存在性与将列定义为 NULL 或 NOT NULL 之间的关系。表中的条目显示了结果。列定义 没有输入项,没有默认值 没有输入项,有默认值 输入 NULL,没有默认值 输入 NULL,有默认值 NULL NULL default NULL NULL NOT NULL Error default error error  说明  SQL Server 是将空字符串解释为单个空格还是解释为真正的空字符串,由 sp_dbcmptlevel 的设置控制。如果兼容级别小于或等于 65,SQL Server 就将空字符串解释为单个空格。如果兼容级别等于 70,则 SQL Server 将空字符串解释为空字符串。有关更多信息,请参见 sp_dbcmptlevel。若要重命名默认值,请使用 sp_rename。若要获得默认值的报表,请使用 sp_help。权限CREATE DEFAULT 的权限默认授予 sysadmin 固定服务器角色成员和 db_owner 和 db_ddladmin 固定数据库角色成员。sysadmin、db_owner 和 db_securityadmin 角色的成员可以将权限转让给其他用户。示例A.创建简单的字符默认值下面的示例创建字符默认值 unknown。USE pubs
GO
CREATE DEFAULT phonedflt AS ''''unknown''''
B.绑定默认值下面的示例绑定示例 A 中创建的默认值。只有当 authors 表的 phone 列没有输入项时,该默认值才起作用。请注意,没有输入项和显式指定空值不同。因为名为 phonedflt 的默认值不存在,所以下列 Transact-SQL 语句将失败。本例只用于演示。USE pubs
GO
sp_bindefault phonedflt, ''''authors.phone''''
四、DROP DEFAULT从当前数据库中删除一个或多个用户定义的默认值。 DROP DEFAULT 语句不适用于 DEFAULT 约束。有关除去 DEFAULT 约束(通过使用 CREATE TABLE 或 ALTER TABLE 语句的 DEFAULT 选项所创建)的更多信息,请参见本卷中的"ALTER TABLE"。语法DROP DEFAULT { default } [ ,...n ]参数default是现有默认值的名称。若要查看现有默认值的列表,请执行 sp_help。默认值必须符合标识符规则。有关更多信息,请参见使用标识符。可以选择是否指定默认值所有者名称。n是表示可以指定多个默认值的占位符。注释除去默认之前,通过执行 sp_unbindefault 解除绑定默认值(如果默认值当前绑定到列或用户定义的数据类型)。从允许空值的列中除去默认值后,当添加行且没有显式提供值时,将在那个位置插入 NULL。从 NOT NULL 列中除去默认值后,当添加行且没有显式提供值时,将返回错误信息。这些行以后作为标准 INSERT 语句行为的一部分添加。权限默认情况下,将 DROP DEFAULT 权限授予默认值所有者,该权限不可转让。然而,db_owner 和 db_ddladmin 固定数据库角色成员以及 sysadmin 固定服务器角色成员可以通过在 DROP DEFAULT 中指定所有者除去任何默认对象。示例A. 除去默认值如果默认值没有绑定到列或用户定义的数据类型,可以很容易地使用 DROP DEFAULT 将其除去。下例删除用户创建的名为 datedflt 的默认值。USE pubs
IF EXISTS (SELECT name FROM sysobjects
         WHERE name = ''''datedflt''''
            AND type = ''''D'''')
   DROP DEFAULT datedflt
GO
B. 除去绑定到列的默认值下例解除绑定与 authors 表的 phone 列关联的默认值,然后除去名为 phonedflt 的默认值。USE pubs
IF EXISTS (SELECT name FROM sysobjects
         WHERE name = ''''phonedflt''''
            AND type = ''''D'''')
   BEGIN
  &nbs

[1] [2]  下一页


[Access]sql随机抽取记录  [Access]ASP&SQL让select查询结果随机排序的实现方法
[系统软件]SQL语句性能优化--LECCO SQL Expert  [C语言系列]SQL Server到DB2连接服务器的实现
[C语言系列]SQL Server到SYBASE连接服务器的实现  [C语言系列]SQL Server到SQLBASE连接服务器的实现
[C语言系列]SQL Server连接VFP数据库的实现  [C语言系列]ASP+SQL Server之图象数据处理
[C语言系列]SQL Server连接ACCESS数据库的实现  [C语言系列]DBA的最佳选择—图形界面还是T-SQL命令?
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · Sql Server  · MySql
    · Access  · ORACLE
    · SyBase  · 其他
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台