Create Type 的话呢,是创建一个自定义的数据类型,等于说为常用的数据类型建造一个别名的样纸。然后就可以通用当前数据库的当前架构。(当然了,一般来说我们都是使用dbo架构,所以都会无事前面那个说明)╮(╯_╰)╭。
下面我来演示一下相关内容
最简单的先创建一个类型TS,然后把它查出来。虽然看起来类型是 TS,但是实际上查看变量的数据类型,还是varchar ,还是对准了基础类型。所以虽然比如我们定义了一个char(11) 的Phone 类型,又或者是一个 char(1) 的Sex,实际上看到的描述,也还是它的定义的类型。
CREATE TYPE TS FROM varchar(50) DECLARE @AA TS = ''
SELECT SQL_VARIANT_PROPERTY(@AA,'BaseType') --
varchar
然后我们看下在Sys.Columns 里面对 TS的描述,对于system_type_id,也是对应167 就是varchar 的类型,然后再max_length还是我们定义的那个。而且指定了 is_user_defined = 1 就是表示了是用户自定义的数据类型了
SELECT system_type_id ,
user_type_id ,
schema_id ,
principal_id ,
max_length ,
precision ,
collation_name ,
scale ,
is_nullable ,
is_user_defined ,
is_assembly_type ,
default_object_id ,
is_table_type FROM sys.types WHERE name = 'TS' system_type_id user_type_id schema_id principal_id max_length precision collation_name scale is_nullable is_user_defined is_assembly_type default_object_id is_table_type
-------------- ------------ ----------- ------------ ---------- --------- -------------------------------------------------------------------------------------------------------------------------------- ----- ----------- --------------- ---------------- ----------------- -------------
167 257 1 NULL 50 0 Chinese_PRC_CI_AS
然后是自定义的类型支持辣么多的基础类型哦~
bigint |
binary( n ) |
bit |
char( n ) |
date |
datetime |
datetime2 |
datetimeoffset |
decimal |
float |
image |
int |
money |
nchar( n ) |
ntext |
numeric |
nvarchar( n |max) |
real |
smalldatetime |
smallint |
smallmoney |
sql_variant |
text |
time |
tinyint |
uniqueidentifier |
varbinary( n |max) |
varchar( n |max) |
还有一点,定义了自定义数据类型,是在本架构适用!所以创建临时表是不能使用自定义类型的!因为临时表在Tempdb里面。并不在自定义变量的作用域!
所以,虽然架构上面的问题我们开发的时候会忽略,但是还是得留个心眼哦~