频 道 直 达 - 新闻 - 培训 - 软件 - 教程 - 前沿 - 组网 - 系统应用 - 安全 - 编程 - 存储 - 操作系统 - 数据库 - 服务器 - 专题 - 产品 - 案例库 - 读书 - 博客 - BBS
51CTO.COM_中国最大的网络技术网站
找资料:

4.2.1 创建自定义数据类型

作者: 周 涛 吕伟臣 王媛红编著 出处:清华大学出版社  2008-03-28 17:18    砖    好    评论   进入论坛
阅读提示:《SQL Server 2005数据库管理高级教程》本书侧重于介绍基于SQL Server 2005数据库应用程序的设计与开发知识。第四章主要介绍的是自定义数据类型、自定义类型和自定义函数的创建与使用方法。本文说的是创建自定义数据类型。

4.2  使用自定义数据类型

创建自定义数据类型的方法非常简单,Transact-SQL为自定义数据类型的管理提供了两个存储过程,如表4.1所示。

表4.1  与自定义数据类型相关的存储过程

存储过程

 

sp_addtype

添加一个自定义数据类型

sp_droptype

删除一个自定义数据类型

4.2.1  创建自定义数据类型
数据库管理员可以使用系统存储过程sp_addtype来创建自定义数据类型。该存储过程的使用格式如下所示:

sp_addtype [ @typename = ] type, 
    [ @phystype = ] system_data_type 
    [ , "identity" |[ @nulltype = ] 'null_type' ]

因为,该存储过程是一个系统存储过程,因此可以通过Microsoft SQL Server Management Studio来查看此存储过程使用的参数。打开Microsoft SQL Server Management Studio,依次展开【数据库】|【系统数据库】|master|【可编程性】|【存储过程】|【系统存储过程】节点,右击名为sp_addtype的存储过程,然后从弹出的快捷菜单中选择【修改】命令,在管理器的右侧打开存储过程的Transact-SQL脚本,该脚本的开始列出了存储过程的输入参数,如图4.1所示。

图4.1 存储过程的输入参数

sp_addtype存储过程使用的参数如表4.2所示。

表4.2  存储过程使用的参数

 

 

@typeName

即用户自定义类型的名称

@phystype

创建自定义类型时依据的SQL Server 数据类型

@nulltype /identity

该自定义类型处理空值的方式/或是否为标识字段

@owner

类型的所有者,可以为空

上述参数中,需要特别介绍一下参数@nulltype,该参数用于指定自定义数据类型处理空值的方式。即用户定义的数据类型可以为空NULL或不能为空NOT NULL或NONULL。如果没有在@nulltype参数中指定一个自定义函数的空属性处理方式,则使用当前的默认空属性。如果想了解当前的空属性,可以使用GETANSINULL函数。例如,可在【查询编辑器】中输入下面的SQL脚本查看数据库Northwind的空属性:

USE Northwind
PRINT GETANSINULL('Northwind')

单击【执行】按钮,执行上述脚本。返回的结果值为‘1’,其中‘1’表示空属性值为ANSINULL,即空值。此外,数据库管理员可以使用存储过程sp_dboption将默认空属性设置为允许为空。

【示例1】使用sp_addtype存储过程来创建用户自定义函数。

完整过程如下。

(1) 首先要为示例数据创建一个账户数据表Account,其中包含能够访问该数据表的账户名称,以及与它们相关的信息,例如登录密码、账户类型(例如,一般用户或管理员等)以及EML等,如表4.3所示。

表4.3  数据表Account中包含的字段

字段名称

 

AccountName

账户名,长为20的字符串,不能为空

Password

登录密码,长为10的字符串,不能为空

AccountType

账户类型,长为1的字符,不能为空

EML

邮件地址,长为20的字符串,可以为空

这里不采用传统数据表创建方法,而是先创建用户自定义数据类型,然后再使用自定义数据类型来创建数据表Account。首先在【查询编辑器】中输入下面的Transact-SQL脚本:

USE Northwind
EXEC SP_ADDTYPE AccountType,'VARCHAR(20)','NOT NULL'
EXEC SP_ADDTYPE PasswordType,'VARCHAR(10)','NOT NULL'
EXEC SP_ADDTYPE ClassType,'CHAR(1)','NOT NULL'
EXEC SP_ADDTYPE EMLType,'VARCHAR(20)','NULL'

(2) 单击【执行】按钮创建上述用户自定义数据类型。切换到管理控制台左侧的【对象资源管理器】,单击Northwind数据库中的【可编程性】节点,并单击【类型】节点下的【用户定义数据类型】,可以看到上述SQL语句生成的自定义数据类型,如图4.2所示。

图4.2 生成的自定义数据类型

(3) 接下来在【查询编辑器】中输入下面的Transact-SQL语句:

USE Northwind
CREATE TABLE Account
(AccountName AccountType,
 Password PasswordType,
 AccountType ClassType,
 EML EMLType)

(4) 单击【执行】按钮创建名为Account的数据表,单击数据库Northwind节点下的【表】节点,会发现上述Transact-SQL创建的数据表Account。展开该数据表Account节点,查看数据表所含字段,如图4.3所示。

图4.3 查看数据表所含字段

(5) 下面继续定义一个数值类型的自定义类型。在【查询编辑器】中输入以下SQL脚本,如下所示:

USE Northwind
GO
sp_addtype IDType, 'NUMERIC (4,0)','NONULL'
GO

(6) 上面的SQL脚本创建了一个名为IDType的自定义数据类型。IDType为一个长为4位的整数数据类型。继续在【查询编辑器】中输入下面的SQL脚本,重新创建数据表Account:

USE Northwind
DROP TABLE Account
GO
CREATE TABLE Account
(
   Accountid IDType IDENTITY,
   AccountName AccountType,
   Password PasswordType,
   AccountType ClassType,
   EML EMLType
)
GO

(7) 按照上面介绍的方法查看数据表Account,会发现该数据表中多了一个名为Accountid的字段,该字段被用于标识账号记录的序号。右击数据表Account,从弹出的快捷菜单中选择【修改】命令,查看该数据表的【属性】对话框。该对话框中的【表设计器】选项中显示该数据表的【标识列】为Accountid,如图4.4所示。

硕图4.4 显示该数据表的【标识列】为Accountid

试一试

除了可以使用Transact-SQL创建一个自定义数据类型之外,也可以使用Microsoft SQL Server Management Studio创建一个自定义数据类型。使用Microsoft SQL Server Management Studio创建一个自定义数据类型的步骤如下所示。

(1) 单击当前数据库(本示例中为Northwind)节点下的【类型】节点。然后右击该节点下的【用户定义数据类型】节点,从弹出的快捷菜单中选择【新建用户定义数据类型】命令,如图4.5所示。

图4.5 选择【新建用户定义数据类型】命令

(2) 选择【新建用户定义数据类型】命令,打开【新建用户定义数据类型】对话框,可以在该对话框中创建自己所需的数据类型。例如,通过该对话框创建数据类型IDType的方法如图4.6所示。

图4.6 创建数据类型IDType

【责任编辑:董书 TEL:(010)68476606】

回书目   上一节   下一节
· 前 言(03/28)
· 前 言(03/28)
· 前 言(03/28)
· 前 言(03/28)
· 前 言(03/28)
专题
Sun以10亿美元并购开源数据库厂商MySQL
Windows Home Server 家用服务器专题
Windows Server 2008专题
Oracle数据库开发之PL/SQL基础应用
Oracle数据库开发基础教程
我也说两句

匿名发表

(如果看不清请点击图片进行更换)


中 国 最 大 的 网 络 技 术 网 站 ·
技 术 成 就 梦 想
订阅技术快讯
电子杂志下载
名称:SQL Server数据库管理精品黄皮书
简介:书中文章经过精挑细选,便于用户能根据自己的实际工作和学习,快速在本书寻找到相关资料。内容涵盖了SQL Server的安装与升级、语句查询、数据备份和恢复、自动化任务、数据同步、数据字典、安全和预防、性能和优化、集群等各方面应用信息,以及DBA管理人员在数据库管理工作中
名称:2007路由技术大全
简介:《2007路由技术大全》由51CTO.com网站特别策划制作,该书包括路由器技术、路由器产品、路由器配置、安全设置、路由器故障处理、路由器密码恢复,以及广大网友在实践使用中的心得经验和技巧文章,内容注重实用性,适用于初学者入门,也适合多年从业者提高,是一本实践和理论完
名称:网络安全精品应用黄皮书
简介:《2007精品网络安全黄皮书》包括了9个大类24个小类, 800余篇文章,内容包含了熊猫烧香病毒、DDOS攻击、ARP病等热点问题的介绍及解决方案。从病毒查杀、防范、系统、数据等各方面的安全设置到黑客技术的了解、防范,涉及到了安全应用的全部领域, 由浅至深内容全面。
SQL Server入门到精通
SQL Server入门到精通
国际文档格式标准开战
国际文档格式标准开战
初探敏捷开发
初探敏捷开发
· 初探敏捷开发
· Linux——从菜鸟到高手
· 体验Visual Studio 200..
· SOA 面向服务架构
· CISSP认证成长之路
· 隐私保护技术探讨
· WCF开发基础
· 珊瑚虫QQ作者侵权案开庭
· SQL Server 2008/2005..
· 华为员工自杀频频拷问..
· 计算机网络维护入门
· 开源虚拟化技术Xen
· 贝恩资本携手华为22亿..
· 如何优化IT 控制能耗
· VMware技术应用
· 打造安全服务器
清除流氓软件——51CTO特别专题
清除流氓软件——51CTO特别专..
ARP攻击防范与解决方案
ARP攻击防范与解决方案
iSCSI应用与发展
iSCSI应用与发展
· iSCSI应用与发展
· SQL Server 2008/2005..
· SOA 面向服务架构
· SQL Server 2008/2005..
· iSCSI应用与发展
· RAID——磁盘阵列基础
· 中间件应用技术专题
· SQL Server入门到精通
· 病毒查杀专题
· 国际文档格式标准开战
· Linux防火墙
· 打造安全服务器
· Sniffer安全技术从入门..
· SOA 面向服务架构
· ADSL应用面面俱到
· 入侵防护系统(IPS)初探
ARP攻击防范与解决方案
ARP攻击防范与解决方案
SQL Server 2008/2005全解
SQL Server 2008/2005全解
iSCSI应用与发展
iSCSI应用与发展
· iSCSI应用与发展
· 中间件应用技术专题
· SQL Server入门到精通
· SQL Server 2008/2005..
· SOA 面向服务架构
· iSCSI应用与发展
· RAID——磁盘阵列基础
· 身份认证技术
· 病毒查杀专题
· 清除流氓软件——51CTO..
· Sniffer安全技术从入门..
· SOA 面向服务架构
· 了解统一威胁管理(UTM)..
· ADSL应用面面俱到
· ADSL应用面面俱到
· 反垃圾邮件技术应用