sp_addtype (Transact-SQL)

适用于:SQL Server

创建别名数据类型。

重要

在 SQL Server的未来版本中将删除此功能。 请避免在新的开发工作中使用该功能,并着手修改当前还在使用该功能的应用程序。 请改用 CREATE TYPE

Transact-SQL 语法约定

语法

sp_addtype
    [ @typename = ] N'typename'
    , [ @phystype = ] N'phystype'
    [ , [ @nulltype = ] 'nulltype' ]
    [ , [ @owner = ] N'owner' ]
[ ; ]

参数

[ @typename = ] N'typename'

@typename为 sysname,无默认值。

别名数据类型的名称。 别名数据类型名称必须遵循标识符规则,并且在每个数据库中必须是唯一的。 类型sysname,无默认值。

[ @phystype = ] N'phystype'

物理或 SQL Server 提供的别名数据类型所基于的数据类型。 @phystype是 sysname,没有默认值,可以是以下值之一:

  • bigintintsmallint 和 tinyint
  • binaryvarbinary(nimage
  • bit
  • char(n)nchar(n)、varchar(nnvarchar(n、**text 和 ntext
  • datetimesmalldatetime
  • 十进制(sPnumeric(sP
  • floatreal
  • money and smallmoney
  • sql_variant
  • uniqueidentifier

引号是包含嵌入空格或标点符号的所有参数所必需的。 有关可用数据类型的详细信息,请参阅数据类型(Transact-SQL)。

  • n

    一个非负整数,指示所选数据类型的长度。

  • P

    一个非负整数,指示可存储在小数点左侧和右侧的十进制数字的最大总数。 有关详细信息,请参阅 decimal 和 numeric (Transact-SQL)

  • s

    一个非负整数,指示可存储在小数点右侧的十进制数字的最大数目,并且必须小于或等于精度。 有关详细信息,请参阅 decimal 和 numeric (Transact-SQL)

[ @nulltype = ] 'nulltype'

指示别名数据类型处理空值的方式。 @nulltypevarchar(8),默认值 NULL为 ,并且必须用单引号('NULL''NOT NULL''NONULL'括起来。

如果未 显式定义@nulltype ,则会将其设置为当前默认可为 null 性。 使用 GETANSINULL 系统函数确定当前的默认可为 null 性。 可以使用 SET 语句或 ALTER DATABASE. 应显式定义为空性。 如果@phystype未指定@nulltype,则默认值为 NOT NULL

注意

@nulltype参数仅定义此数据类型的默认可为 null 性。 如果在创建表的过程中使用别名数据类型时显式地定义了为空性,那么该为空性优先于已定义的为空性。 有关详细信息,请参阅 ALTER TABLE (Transact-SQL)CREATE TABLE (Transact-SQL)。

[ @owner = ] N'owner'

标识为仅供参考。 不支持。 不保证以后的兼容性。

返回代码值

0(成功)或 1(失败)。

结果集

无。

注解

别名数据类型名称在数据库中必须是唯一的,但是名称不同的别名数据类型可以有相同的定义。

执行 sp_addtype 将创建显示在特定数据库的目录视图中的别名数据类型 sys.types 。 如果别名数据类型必须在所有新的用户定义的数据库中可用,请将其添加到 model。 创建别名数据类型后,可以使用别名数据类型,也可以ALTER TABLECREATE TABLE默认值和规则绑定到别名数据类型。 通过使用 sp_addtype 创建的所有标量别名数据类型都包含在架构中 dbo

别名数据类型继承数据库的默认排序规则。 别名类型的列和变量的排序规则在 Transact-SQL CREATE TABLEALTER TABLEDECLARE @<local_variable>语句中定义。 更改数据库的默认排序规则仅适用于类型的新列和变量;它不会更改现有排序规则。

重要

出于向后兼容性目的,公共数据库角色会自动授予REFERENCES对使用 <a0/> 创建的别名数据类型的权限。 请注意,使用语句而不是sp_addtype使用CREATE TYPE语句创建别名数据类型时,不会发生此类自动授予。

不能使用 SQL Server 时间戳、表xmlvarchar(max)、nvarchar(max)varbinary(max)数据类型定义别名数据类型。

权限

需要db_ownerdb_ddladmin固定数据库角色的成员身份。

示例

A. 创建不允许 null 值的别名数据类型

以下示例创建一个名为 (social security number) 的 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. 创建允许 null 值的别名数据类型

以下示例创建允许空值并且名为 datetime 的别名数据类型(基于 birthday)。

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