sp_addtype (Transact-SQL)
创建别名数据类型。
重要提示 |
---|
后续版本的 Microsoft SQL Server 将删除该功能。请避免在新的开发工作中使用该功能,并着手修改当前还在使用该功能的应用程序。请改为使用 CREATE TYPE。 |
语法
sp_addtype [ @typename = ] type,
[ @phystype = ] system_data_type
[ , [ @nulltype = ] 'null_type' ] ;
参数
[ @typename= ] type
别名数据类型的名称。 别名数据类型名称必须遵循标识符规则,并且在每个数据库中必须是唯一的。 type 的数据类型为 sysname,无默认值。[ @phystype=] system_data_type
别名数据类型所基于的物理数据类型或 SQL Server 提供的数据类型。system_data_type 的数据类型为 sysname,无默认值,可以是下列值之一:bigint
binary(n)
bit
char(n)
datetime
decimal
float
image
int
money
nchar(n)
ntext
numeric
nvarchar(n)
real
smalldatetime
smallint
smallmoney
sql_variant
text
tinyint
uniqueidentifier
varbinary(n)
varchar(n)
如果参数中嵌入有空格或标点符号,则必须用引号将该参数引起来。 有关可用数据类型的详细信息,请参阅数据类型 (Transact-SQL)。
n
非负整数,指示所选数据类型的长度。P
非负整数,指示可保留的最大十进制位数,包括小数点前面和后面的数字。 有关详细信息,请参阅 decimal 和 numeric (Transact-SQL)。s
非负整数,指示小数点后面的小数数字可保留的最大十进制位数,它必须小于或等于精度值。 有关详细信息,请参阅decimal 和 numeric (Transact-SQL)。[ @nulltype = ] 'null_type'
指示别名数据类型处理空值的方式。 null_type 的数据类型为 varchar(8),默认值为 NULL,并且必须用单引号引起来('NULL'、'NOT NULL' 或 'NONULL')。 如果 null_type 没有通过 sp_addtype 显式定义,则将它设置为当前默认的为空性。 使用 GETANSINULL 系统函数可确定当前默认的为空性。 可以使用 SET 语句或 ALTER DATABASE 对该为空性进行调整。 应显式定义为空性。 如果 @phystype 的数据类型为 bit,并且未指定 @nulltype,则默认值为 NOT NULL。注意 null_type 参数只为该数据类型定义默认的为空性。 如果在创建表的过程中使用别名数据类型时显式地定义了为空性,那么该为空性优先于已定义的为空性。 有关详细信息,请参阅 ALTER TABLE (Transact-SQL) 和 CREATE TABLE (Transact-SQL)。
返回代码值
0(成功)或 1(失败)
结果集
无
注释
别名数据类型名称在数据库中必须是唯一的,但是名称不同的别名数据类型可以有相同的定义。
执行 sp_addtype 创建别名数据类型,该数据类型可在特定数据库的 sys.types 目录视图中出现。 如果所有新的用户定义数据库中都必须具有这一别名数据类型,请将其添加到 model。 创建了别名数据类型之后,可以在 CREATE TABLE 或 ALTER TABLE 中使用它,也可以将默认值和规则绑定到别名数据类型。 使用 sp_addtype 创建的所有标量别名数据类型都包含在 dbo 架构中。
别名数据类型继承数据库的默认排序规则。 别名类型的列和变量的排序规则在 Transact-SQL CREATE TABLE、ALTER TABLE 和 DECLARE @local\_variable 语句中定义。 对数据库默认排序规则的更改仅应用于该类型的新列和新变量;它不会更改现有列和变量的排序规则。
安全说明 |
---|
为了向后兼容,将自动授予 public 数据库角色对通过使用 sp_addtype 创建的别名数据类型具有 REFERENCES 权限。 请注意,当使用 CREATE TYPE 语句而不是 sp_addtype 创建别名数据类型时,不会进行自动授权。 |
别名数据类型不能通过使用 SQL Server timestamp、table、xml、varchar(max)、nvarchar(max) 或 varbinary(max) 数据类型定义。
权限
要求具有 db_owner 或 db_ddladmin 固定数据库角色中的成员身份。
示例
A.创建不允许空值的别名数据类型
以下示例创建名为 ssn(社会保障号)的别名数据类型,该数据类型基于 SQL Server 所提供的 varchar 数据类型。 ssn 数据类型用于那些保存 11 位数字的社会保障号 (999-99-9999) 的列。 该列不能为 NULL。
请注意,varchar(11) 由单引号引了起来,这是因为它包含了标点符号(括号)。
USE master;
GO
EXEC sp_addtype ssn, 'varchar(11)', 'NOT NULL';
GO
B.创建允许空值的别名数据类型
以下示例创建允许空值并且名为 birthday 的别名数据类型(基于 datetime)。
USE master;
GO
EXEC sp_addtype birthday, datetime, 'NULL';
C.创建其他别名数据类型
以下示例为国内及国际电话和传真号码另外创建两个别名数据类型,分别为 telephone 和 fax。
USE master;
GO
EXEC sp_addtype telephone, 'varchar(24)', 'NOT NULL';
GO
EXEC sp_addtype fax, 'varchar(24)', 'NULL';
GO