为用户定义的数据类型绑定规则示例.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

转载于:https://www.cnblogs.com/dushu/archive/2012/05/20/2510797.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值