创建用户定义的数据类型
sp_addtype <typename>,
<phystype> [(<length>) | (<precision> [, <scale>])]
[, "identity" | <nulltype>]
是用户定义的数据类型的名称。类型名必须符合标识符的规则并且在每个数据库中必须是唯一的。
是物理数据类型或 SAP ASE 服务器提供的数据类型,该数据类型是用户定义的数据类型的基础。您可以指定除 timestamp 之外的任何 SAP ASE 数据类型。
The char、varchar、unichar、univarchar、nchar、nvarchar、binary 和 varbinary 数据类型要求将<长度>加以括号。如果未提供长度,则 SAP ASE 将使用 1 个字符的缺省长度。
float 数据类型要求将二进制
numeric 和 decimal 数据类型要求将十进制 <precision> 和 <scale>,用括号括起来并用逗号分隔。如果未提供精度和标度,则 SAP ASE 服务器将使用缺省精度 18 和缺省标度 0。
用单引号或双引号将包含标点符号(例如小括号或逗号)的物理类型引起来。
指示用户定义的数据类型具有 IDENTITY 属性。用单引号或双引号将 identity 关键字引起来。您只能为标度为 0 的 numeric 数据类型指定 IDENTITY 属性。
IDENTITY 列存储由 SAP ASE 服务器生成的序列号,例如发票编号或职员编号。IDENTITY 列的值唯一地标识表中的每一行。IDENTITY 列不能进行更新,也不允许空值。
指示用户定义的数据类型如何处理空值条目。此参数可接受的值包括null、NULL、nonull、NONULL、"not null" 和 "NOT NULL"。必须用单引号或双引号将包括空格的任何 <nulltype> 引起来。
如果既省略了 IDENTITY 属性又省略了 <nulltype>,则 SAP ASE 服务器将使用为数据库定义的空值模式创建数据类型。缺省情况下,未指定 <nulltype> 的数据类型将被创建为 NOT NULL(也就是说,不允许空值并且需要明确输入)。为符合 SQL 标准,使用 sp_dboption 系统过程将 allow nulls by default 选项设置为 true。这会将数据库的空值模式更改为 NULL。
创建一个名为 ssn 的用户定义的数据类型,该数据类型将用于保存社会保险号的列。由于未指定 varchar(11) 引在引号中,这是因为它包含标点符号(小括号):
sp_addtype ssn, "varchar(11)"
创建一个名为 birthday 的用户定义的数据类型,该数据类型允许使用空值:
sp_addtype birthday, "datetime", null
创建一个名为 temp52 的用户定义的数据类型,该数据类型用于存储温度(最多 5 个有效位数,其中小数点右侧 2 位):
sp_addtype temp52, "numeric(5,2)"
创建一个名为 row_id 的用户定义的数据类型,该数据类型具有 IDENTITY 属性,将用作唯一行标识符。使用此数据类型创建的列存储长度最多为 10 位的系统生成的值:
sp_addtype "row_id", "numeric(10,0)", "identity"
创建具有 sysname 基础类型的用户定义的数据类型:
sp_addtype systype, sysname
虽然您不能在 create table、alter table 或 create procedure 语句中使用 sysname 数据类型,但却可以使用基于 sysname 的用户定义的数据类型。
###用法
<@@ncharsize> 的值。
使用以下查询列出数据库中每个系统提供的和用户定义的类型的层次:
select name, hierarchy
from systypes
order by hierarchy
create table new_table (id_col IdentType)
create table new_table (id_col IdentType identity)
create table new_table (id_col IdentType not null)
当使用 create table 或 alter table 语句创建列时,您可以替换通过 sp_addtype 系统过程指定的空值类型:
如果尝试从 IDENTITY 类型创建空列,则 create或 alter table 语句将失败。