SQL Server提供两种数据类型:系统数据类型和用户定义数据类型。
1、SQL SERVER2005中的系统数据类型
SQL Server引入几个新的数据类型varchar(max), nvarchar(max), varbinary(max)和xml。(max)数据类型是大值数据类型,可以存储多大2GB的数据,用于替代以前的text, ntext 和image。这些新的大值数据类型的优点是可以对其使用transact-SQL函数,可以将他用作变量,也可以将他用作过程和函数的参数。
另外一种新的数据类型XML。该数据类型可以按照原样存储XML文档和XML文档片段,
字段类型 | 描述 | |||||
字符串(非UNICODE ) | ||||||
char[(n)] | 固定长度字符数据,长度为n 个字符,1 ≤n ≤8000 。 | |||||
varchar[(n)] varchar(max) | 可变长字符数据,1 ≤n ≤8000 或max 。max 指示最大存储2^31-1 字节。存储大小为实际字符数+2 。 | |||||
UNICODE 字符串 | ||||||
nchar[(n)] | 固定长度字符数据,长度为n 个字符,1 ≤n ≤8000 。 | |||||
nvarchar[(n)] nvarchar(max) | 可变长字符数据,1 ≤n ≤8000 或max 。max 指示最大存储2^31-1 字节 。存储大小为实际字符数*2+2 。 | |||||
精确数字 | ||||||
bit | 列为8Bit 或更少,则作为1 字节存储;以此类推 可以取0 、1 或NULL ,注意 bit 列上不允许创建索引 | |||||
tinyint | 从0 到255 的整型数字;1 字节 | |||||
smallint | 从-2^15 到2^15-1 的整数;2 字节 | |||||
int | 从-2^31 到2^31-1 的整数;4 字节 | |||||
bigint | -2^63 到2^63-1 的整数;8 字节 | |||||
Decimal[(p,[s])] numeric[(p,[s])] | (p) 表示最多可以存储的十进制数字总位数,1 ≤p ≤38 ,默认18 ;(s) 为小数位数。 | 精度 | 存储 | |||
1~9 | 5 字节 | |||||
10~19 | 9 字节 | |||||
20~28 | 13 字节 | |||||
29~38 | 17 字节 | |||||
smallmoney | 从-214748.3648 到214748.3647 的货币数据;4 字节 | |||||
money | -922,337,203,685,477.5808 到922,337,203,685,477.5807 ,精确到货币单位的万分之一;8 字节 | |||||
近似数字 | ||||||
Float[(n)] | -1.79E+308~-2.23E-308 、0 和2.23E-308~1.79E+308 浮点数;1 ≤n ≤53 ,默认53 | n | 精度 | 存储 | ||
1~24 | 7 位数 | 4 字节 | ||||
25~35 | 15 位数 | 8 字节 | ||||
real | -3.04E+38~-1.18E-38 、0 和1.18E-38~3.04E+38 的浮点数; 4 字节 | |||||
日期时间 | ||||||
smalldatetime | 从1900 年1 月1 日到2079 年6 月6 日,精确到分。4 字节 | |||||
datetime | 从1753 年1 月1 日到9999 年12 日31 ,精确到3.33 毫秒。 8 字节 | |||||
二进制字符串 | ||||||
binary[(n)] | 固定长度二进制数据,1 ≤n ≤8000 。 | |||||
varbinary[(n)] varbinary(max) | 可变长字符数据,1 ≤n ≤8000 或max 。max 指示最大存储2^31-1 字节。存储大小为实际长度+2 。 | |||||
其他数据类型 | ||||||
timestamp | 每当插入或更新一行数据时,数据库会使用一个唯一的二进制数字自动更新timestamp 列。每个表只能有一个timestamp 列。8 字节 | |||||
unique identifier | 存储16 字节二进制值的全局唯一标识符(GUID ) | |||||
Cursor | 对游标的引用,只能用作变量或存储过程参数 | |||||
sql_variant | 支持各种数据类型,该列中存储数据值或描述该值的数据。不能存储(timestamp 、xml 、varchr(max) 、nvarchar(max) 、varbinary(max) 、sql_variant 和用户定义数据类型);最大长度为8016 字节 | |||||
Table | 类似于使用临时表——声明中包括列的列表和数据类型。可用于定义局部变量或用户定义函数的返回值 | |||||
Xml | 存储XML 数据。最大2G |
2.用户定义的数据类型
用户定义数据类型分为两类——别名类型和公共语言运行时(CLR)用户定义类型。
(1)创建别名数据类型
别名数据类型是自定义的系统数据类型。别名数据类型基于单一的系统数据类型,但他提供了一种对数据类型应用更具描述性名称的机制。别名数据类型可以进一步优化系统数据类型,以确保不同表使用公共数据元素时的一致性。
在创建别名时,必须提供别名名称、所基于的系统数据类型,以及为空性(是否允许为NULL)
Create TYPE [schema_name, ] type_name
{
From base_type
[ (precision [ ,scale ])]
[ NULL | NOT NULL ]
| EXTERNAL NAME assembly_name [.class_name]
}
如创建一个photo_number别名数据类型:
Create TYPE photo_number FROM varchar(12) NULL
(2)创建CLR用户定义数据类型
a、使用Microsoft.NET Framwork支持的编程语言将用户定义类型编码成类或结构体
b、使用合适的编译器编译,构建一个程序集
c、使用create assembly语句在SQL Server2005中注册程序集
d、使用Create Type语句创建医用该该程序集的数据类型。
SQL 2005默认不能执行CLR代码,要启用CLR代码执行,需要启用:
sp_configure 'clr enabled', 1
reconfiger ;
(3)删除用户定义数据类型
Drop TYPE [ schema_name. ] type_name