sp_addtype (Transact-SQL)

创建别名数据类型。

ms189784.note(zh-cn,SQL.90).gif重要提示:
后续版本的 Microsoft SQL Server 将删除该功能。请避免在新的开发工作中使用该功能,并着手修改当前还在使用该功能的应用程序。 改为使用 CREATE TYPE

主题链接图标Transact-SQL 语法约定

语法

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。

ms189784.note(zh-cn,SQL.90).gif注意:
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 语句中定义。对数据库默认排序规则的更改仅应用于该类型的新列和新变量;它不会更改现有列和变量的排序规则。

ms189784.security(zh-cn,SQL.90).gif安全说明:
为了向后兼容,将自动授予 public 数据库角色对通过使用 sp_addtype 创建的别名数据类型具有 REFERENCES 权限。请注意,当使用 CREATE TYPE 语句而不是 sp_addtype 创建别名数据类型时,不会进行自动授权。

别名数据类型不能通过使用 SQL Server timestamptablexmlvarchar(max)nvarchar(max)varbinary(max) 数据类型定义。

权限

要求具有 db_ownerdb_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. 创建其他别名数据类型

以下示例为国内及国际电话和传真号码另外创建两个别名数据类型,分别为 telephonefax

USE master;
GO
EXEC sp_addtype telephone, 'varchar(24)', 'NOT NULL';
GO
EXEC sp_addtype fax, 'varchar(24)', 'NULL';
GO

请参阅

参考

数据库引擎存储过程 (Transact-SQL)
CREATE TYPE (Transact-SQL)
CREATE DEFAULT (Transact-SQL)
CREATE RULE (Transact-SQL)
sp_bindefault (Transact-SQL)
sp_bindrule (Transact-SQL)
sp_droptype (Transact-SQL)
sp_rename (Transact-SQL)
sp_unbindefault (Transact-SQL)
sp_unbindrule (Transact-SQL)
系统存储过程 (Transact-SQL)

帮助和信息

获取 SQL Server 2005 帮助