sp_addtype (Transact-SQL)
适用范围:SQL Server
创建别名数据类型。
重要
在 SQL Server的未来版本中将删除此功能。 请避免在新的开发工作中使用该功能,并着手修改当前还在使用该功能的应用程序。 请改用 CREATE TYPE 。
语法
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,没有默认值,可以是以下值之一:
- bigint、int、smallint 和 tinyint
- binary、 varbinary(n)和 image
- bit
- char(n)、nchar(n)、varchar(n)、nvarchar(n)、**text 和 ntext
- datetime 和 smalldatetime
- 十进制(s、 P) 和 numeric(s、 P)
- float 和 real
- money 和 smallmoney
- sql_variant
- uniqueidentifier
引号是包含嵌入空格或标点符号的所有参数所必需的。 有关可用数据类型的详细信息,请参阅 数据类型。
n
一个非负整数,指示所选数据类型的长度。
P
一个非负整数,指示可存储在小数点左侧和右侧的十进制数字的最大总数。 有关详细信息,请参阅 十进制和数字。
s
一个非负整数,指示可存储在小数点右侧的十进制数字的最大数目,并且必须小于或等于精度。 有关详细信息,请参阅 十进制和数字。
[ @nulltype = ] 'nulltype'
指示别名数据类型处理空值的方式。 @nulltype 是 varchar(8),默认值 NULL
为 ,并且必须用单引号('NULL'
或 'NOT NULL'
) 'NONULL'
括起来。
如果未 显式定义@nulltype ,则会将其设置为当前默认可为 null 性。 使用 GETANSINULL
系统函数确定当前的默认可为 null 性。 可以使用 SET
语句或 ALTER DATABASE
. 应显式定义为空性。 如果@phystype位且未指定@nulltype,则默认值为 NOT NULL
。
注意
@nulltype参数仅定义此数据类型的默认可为 null 性。 如果在创建表的过程中使用别名数据类型时显式地定义了为空性,那么该为空性优先于已定义的为空性。 有关详细信息,请参阅 ALTER TABLE 和 CREATE TABLE。
[ @owner = ] N'owner'
标识为仅供参考。 不支持。 不保证以后的兼容性。
返回代码值
0
(成功)或 1
(失败)。
结果集
无。
注解
别名数据类型名称在数据库中必须是唯一的,但是名称不同的别名数据类型可以有相同的定义。
执行 sp_addtype
将创建显示在特定数据库的目录视图中的别名数据类型 sys.types
。 如果别名数据类型必须在所有新的用户定义的数据库中可用,请将其添加到 model
。 创建别名数据类型后,可以使用别名数据类型,也可以ALTER TABLE
将CREATE TABLE
默认值和规则绑定到别名数据类型。 通过使用 sp_addtype
创建的所有标量别名数据类型都包含在架构中 dbo
。
别名数据类型继承数据库的默认排序规则。 别名类型的列和变量的排序规则在 Transact-SQL CREATE TABLE
ALTER TABLE
和DECLARE @<local_variable>
语句中定义。 更改数据库的默认排序规则仅适用于类型的新列和变量;它不会更改现有排序规则。
重要
出于向后兼容性目的,公共数据库角色会自动授予REFERENCES
对使用 <sp_addtype
使用CREATE TYPE
语句创建别名数据类型时,不会发生此类自动授予。
不能使用 SQL Server 时间戳、表、xml、varchar(max)、nvarchar(max)或 varbinary(max)数据类型定义别名数据类型。
权限
需要db_owner或db_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