• 为用户定义的数据类型绑定规则示例.sql


    /*--示例说明
     下面的示例演示了如何把规则绑定到列和用户定义的数据类型
     并且演示了修改绑定于列和用户定义的数据类型的规则时,这两者之间的差异。
    --*/
    --定义数据类型
    EXEC sp_addtype 'ut_age','int','null'
    GO

    --为ut_age定义规则
    CREATE RULE r_ut_age
    AS
    @age between 0 and 200
    GO

    --将规则绑定到用户定义的数据类型
    EXEC sp_bindrule 'r_ut_age','ut_age'
    GO

    --使用定义的数据类型
    CREATE TABLE tb(
    Name nvarchar(20),
    AGE_u ut_age,
    AGE int)
    GO

    --直接将规则绑定到列
    EXEC sp_bindrule 'r_ut_age','tb.AGE'
    GO

    --插入数据
    INSERT tb VALUES('AA',10,0)
    INSERT tb VALUES('BB',10,210)
    /*--这条记录违反了规则,所以会收到错误信息
    服务器: 消息 513,级别 16,状态 1,行 1
    列的插入或更新与先前的 CREATE RULE 语句所强制的规则冲突。该语句已终止。冲突发生于数据库 'tempdb',表 'tb',列 'AGE'。
    --*/
    GO

    --创建一个新规则
    CREATE RULE r_ut_age1
    AS
    @age between 20 and 300
    GO

    --将新规则绑定到列
    EXEC sp_bindrule 'r_ut_age1','tb.AGE'
    INSERT tb VALUES('BB',10,210)
    --绑定新规则到列时,新规则在插入数据时立即生效
    GO

    --使用futureonly选项将新规则绑定到定义的数据类型
    EXEC sp_bindrule 'r_ut_age1','ut_age',futureonly
    INSERT tb VALUES('CC',10,210)
    INSERT tb VALUES('DD',210,210)
    SELECT * FROM tb
    /*--结果
    绑定新规则到定义的数据类型时,如果指定 futureonly 参数,则已经表中已经定义的列不使用新规则
    所以第二条插入语句收到如何错误信息:
    服务器: 消息 513,级别 16,状态 1,行 1
    列的插入或更新与先前的 CREATE RULE 语句所强制的规则冲突。该语句已终止。冲突发生于数据库 'tempdb',表 'tb',列 'AGE_u'。

    表中的现有数据为:
    Name                 AGE_u       AGE        
    -------------------- ----------- -----------
    AA                   10          0
    BB                   10          210
    CC                   10          210
    --*/
    GO

    --删除定义的规则
    DROP RULE r_ut_age,r_ut_age1
    /*--由于规则已经绑定到用户定义的数据类型和列,所以收到如下错误信息
    服务器: 消息 3716,级别 16,状态 1,行 3
    无法除去 规则 'r_ut_age',因为它绑定到了一个或多个 列 上。
    服务器: 消息 3716,级别 16,状态 1,行 3
    无法除去 规则 'r_ut_age1',因为它绑定到了一个或多个 列 上。
    --*/
    GO

    --按顺序删除就可以了
    DROP TABLE tb
    EXEC sp_droptype 'ut_age'
    DROP RULE r_ut_age,r_ut_age1

  • 相关阅读:
    NetBeans 时事通讯(刊号 # 4 Apr 22, 2008)
    设计演化与设计
    关于奥普迪词典软件竞赛的一点体会、抱怨与建议
    关于奥普迪词典软件竞赛的一点体会、抱怨与建议
    Ubuntu8.04已经可以索要免费CDs了!
    NetBeans 时事通讯(刊号 # 3 Apr 15, 2008)
    SQL行列转换
    STL中map用法详解
    MFC 网络编程 总结 .
    Visual C++内存泄露检测—VLD工具使用说明 .
  • 原文地址:https://www.cnblogs.com/dushu/p/2510797.html
Copyright © 2020-2023  润新知