为用户定义的数据类型绑定规则示例.sql
2012-05-20 20:48
351 查看
/*--示例说明
下面的示例演示了如何把规则绑定到列和用户定义的数据类型
并且演示了修改绑定于列和用户定义的数据类型的规则时,这两者之间的差异。
--*/
--定义数据类型
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
下面的示例演示了如何把规则绑定到列和用户定义的数据类型
并且演示了修改绑定于列和用户定义的数据类型的规则时,这两者之间的差异。
--*/
--定义数据类型
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
相关文章推荐
- 为用户定义的数据类型绑定默认值示例.sql
- 创建与删除用户定义数据类型示例.sql
- 修改已经被表引用的用户定义数据类型示例.sql
- 修改用户定义数据类型对已经编译的存储过程的影响的示例.sql
- SQL 用户定义表类型,在存储过程里使用数据类型作参数
- SQL 用户定义表类型,在存储过程里使用数据类型作參数
- Sql Server2008 Transact-SQL 新兵器学习总结之-用户定义表类型和日期,时间数据类型
- Java语言基础02-用户定义数据类型
- SQL2K数据库开发五之表操作管理用户定义的数据类型
- SQL 用户定义表类型,在存储过程里使用表类型,表参数作参数
- C#编程(四十一)----------用户定义的数据类型转换
- 在SQL和ERWIN中用自定义类型、规则和默认值实现check约束从而保证数据的完整性
- 如何把"用户定义的数据类型"的ower改为dbo
- pb编程中数据类型和变量的定义规则
- 第一部分 数据内存存储、常预定义值类型、用户自定义值类型、预定义引用类型
- PL/SQL中的数据类型隐式转换规则
- c#之用户定义的数据类型转换
- PL/SQL_使用复合数据类型5(批量绑定)
- 【数据库学习笔记】Oracle_01_sql*plus,存储结构,用户管理,常用数据类型
- C语言基础之变量的命名规则、定义常量、C的数据类型