4.2 自定义数据类型
自定义数据类型并不是真正的数据类型,它只是提供了一种加强数据库内部元素和基本数据类型之间一致性的机制,通过使用用户自定义数据类型能够简化对常用规则和默认值的管理。
4.2.1 创建自定义数据类型
在SQL Server 2017中,创建用户自定义数据类型的方法有多种,下面分别进行介绍,不过在创建自定义数据类型之前,我们必须事先选择要创建数据类型所在的数据库。
1. 使用CREATE语句创建
使用CREATE语句可以创建自定义数据类型,具体的语法格式如下。
CREATE TYPE type_name FROM datatype;
主要参数介绍如下。
- type_name:自定义的数据类型名称,名称不能以数字开头。
- datatype:数据类型,定义自定义数据类型表示的数据类型,除了指定数据类型外,还可以指定该类型是否为空值。
实例1:在mydbase数据库中,创建一个用来存储说明信息的remark用户自定义字符串数据类型,它的长度为20并且不能为空值。
在“查询编辑器”窗口中输入以下语句。
CREATE TYPE remark FROM varchar(20) not null;
单击“执行”按钮,即可完成用户定义数据类型的创建,如图4-1所示。执行完成之后,刷新“用户定义数据类型”节点,将会看到新增的数据类型,如图4-2所示。
2. 使用存储过程sp_addtype创建
在SQL Server 2017中,可以使用系统存储过程sp_addtype来创建用户自定义数据类型,其语法格式如下。
sp_addtype [@typename=] type, [@phystype=] system_data_type [, [@nulltype=] 'null_type']
主要参数介绍如下。
- type:用于指定用户定义的数据类型的名称。
- system_data_type:用于指定相应的系统提供的数据类型的名称及定义。注意,未能使用timestamp数据类型,当所使用的系统数据类型有额外说明时,需要用引号将其括起来。
- null_type:用于指定用户自定义的数据类型的null属性,其值可以为null,not null或nonull。默认时与系统默认的null属性相同。用户自定义的数据类型的名称在数据库中应该是唯一的。
实例2:在mydbase数据库中,创建一个用来存储邮政编码信息的postcode用户自定义数据类型,它的长度为6并且不能为空值。
在“查询编辑器”窗口中输入以下语句。
sp_addtype postcode,'char(6)','not null'
单击“执行”按钮,即可完成用户定义数据类型的创建,如图4-3所示。执行完成之后,刷新“用户定义数据类型”节点,将会看到新增的数据类型,如图4-4所示。
图4-1 创建用户定义数据类型
图4-2 新建用户定义数据类型
图4-3 创建用户定义数据类型
3. 以图形向导方式来创建
使用SQL Server Management Studio工具,可以以图形向导方式来创建自定义数据类型。具体创建过程可以分为如下几个步骤。
(1)登录到SQL Server 2017数据库,在“对象资源管理器”窗口中选择需要创建自定义数据类型的数据库,如图4-5所示。
(2)依次打开mydbase→“可编程性”→“类型”节点,选择“用户定义数据类型”节点,右击,在弹出的快捷菜单中选择“新建用户定义数据类型”命令,如图4-6所示。
图4-4 新建用户定义数据类型
图4-5 选择数据库
图4-6 选择“新建用户定义数据类型”命令
(3)打开“新建用户定义数据类型”窗口,在“名称”文本框中输入需要定义的数据类型的名称,这里输入新数据类型的名称为“newtype”,在“数据类型”下拉列表框中选择char的系统数据类型,“长度”指定为8000,如果用户希望该类型的字段值为空的话,可以选中“允许NULL值”复选框,其他参数不做更改,如图4-7所示。
(4)单击“确定”按钮,完成用户定义数据类型的创建,即可看到新创建的自定义数据类型,如图4-8所示。
图4-7 “新建用户定义数据类型”窗口
图4-8 新创建的自定义数据类型
4.2.2 删除自定义数据类型
当不再需要用户自定义的数据类型时,可以将其删除,删除的方法有多种,下面进行介绍。
1. 使用DROP语句来删除
使用DROP TYPE语句可以删除自定义数据类型,
实例3:在mydbase数据库中,删除自定义数据类型remark,在“查询编辑器”窗口中输入以下语句。
DROP TYPE remark;
单击“执行”按钮,即可完成用户定义数据类型的删除操作,如图4-9所示。执行完成后,刷新“用户定义数据类型”节点,可以看到remark数据类型不存在了,如图4-10所示。
2. 使用存储过程sp_droptype来删除
使用sp_droptype来删除自定义数据类型,该存储过程从systypes删除别名数据类型,具体的语法格式如下。
sp_droptype type;
其中,type为用户定义的数据类型。
实例4:在mydbase数据库中,删除自定义数据类型postcode。打开“查询编辑器”窗口,在其中输入以下语句。
sp_droptype postcode;
单击“执行”按钮,即可完成删除操作,如图4-11所示。执行完成之后,刷新“用户定义数据类型”节点,将会看到删除的数据类型消失,如图4-12所示。
图4-9 删除自定义数据类型
图4-10 “用户定义数据类型”节点
图4-11 执行SQL语句
图4-12 “对象资源管理器”窗口
3. 以图形向导方式来删除
使用SQL Server Management Studio工具,可以以图形向导方式来删除用户自定义数据类型。具体删除过程可以分为如下几个步骤。
(1)登录到SQL Server 2017数据库,在“对象资源管理器”窗口中选择需要删除的数据类型,右击,在弹出的快捷菜单中选择“删除”命令,如图4-13所示。
(2)打开“删除对象”窗口,单击“确定”按钮,即可删除自定义数据类型,如图4-14所示。
图4-13 选择“删除”命令
图4-14 “删除对象”窗口
注意:数据库中正在使用的用户定义数据类型,不能被删除。
微视频