sp_addtype (Transact-SQL)

创建别名数据类型。

重要说明重要提示

后续版本的 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。

    注意注意

    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 Servertimestamp、table、xml、varchar(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. 创建其他别名数据类型

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

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