T-SQL 语言基础(二)—— 数据类型
一、精确数字型
1、整数型
数据类型 | 存储长度 | 范围 |
---|---|---|
bigint | 8 字节 | -9223372036854775808 到 9223372036854775807 |
int | 4 字节 | -2147483648 到 2147483648 7 |
smallint | 2 字节 | -32768 到 32767 |
tinyint | 1 字节 | 0,1 或 NULL |
2、带国定精度和小数位数的数据类型
数据类型 | 存储长度 | 范围 |
---|---|---|
numeric | 1-9位:5字节 10-19位:9字节 20-28位:13字节 29-38位:17字节 | -(10^38+1) 到 (10^38-1) |
decimal | 1-9位:5字节 10-19位:9字节 20-28位:13字节 29-38位:17字节 | -(10^38+1) 到 (10^38-1) |
3、货币型
数据类型 | 存储长度 | 范围 |
---|---|---|
money | 8字节 | -922337203685477.5808 到 922337203685477.5808 |
smallmoney | 4字节 | -214748.3647 到 214748.3647 |
二、近似数字型
数据类型 | 存储长度 | 范围 |
---|---|---|
float | 7位:4字节 15位:8字节 | -922337203685477.5808 到 922337203685477.5808 |
real | 4字节 | -214748.3647 到 214748.3647 |
数据类型 | 存储长度 | 范围 |
– | – | – |
money | 8字节 | -922337203685477.5808 到 922337203685477.5808 |
smallmoney | 4字节 | -214748.3647 到 214748.3647 |
三、日期时间类型
数据类型 | 存储长度 | 范围 |
---|---|---|
datetime | 8字节 | 1753-01-01到9999-12-31 |
smalldatetime | 4字节 | 1900-01-01到2079-06-06 |
date | 0001-01-01到9999-12-31 | |
time | 00:00:00.0000000 到 23.59.59.9999999 | |
datetime2(7) | 时间日期组合,最高可以设定到小数点后7位 | |
datetimeoffset | 时间日期组合,其中时间以24小时制显示并带有时区信息 |
C# 类型的 DateTime 应对应数据库的 datetime2(7),但是 Code First 时属性应该加上 [Column(TypeName=”datetime2”)]特性,否则数据库生成的是 datetime 类型,而非datetime2 类型
四、字符串类型
数据类型 | 存储长度 | 范围 |
---|---|---|
char | 1-8000 字符 | 1个字符占一字节,定长字符串 |
varchar | varchar(n):1-8000字符 varchar(max):1到2^31-1字符 | varchar(n):1字符占1字节 varchar(max):实际输入长度加2字节 |
text | 1到2^31-1字符 | 1字符一字节,存储多少字符占多少空间,最大可存储2GB |
五、Unicode 字符串类型
数据类型 | 存储长度 | 范围 |
---|---|---|
nchar | 1-4000 字符 | 1个字符占2字节,定长字符串 |
nvarchar | nvarchar(n):1-4000字符 nvarchar(max):1到2^31-1字符 | nvarchar(n):1字符占2字节 varchar(max):实际输入长度的两倍加2字节 |
ntext | 1到2^31-1字符 | 1字符2字节,存储多少字符占多少空间,最大2GB |
六、二进制字符串
数据类型 | 存储长度 | 范围 |
---|---|---|
binary | 1-8000 字节 | 定长,长度不足系统自动补上 0x00 |
varbinary | varbinary(n):1-8000字节 varbinary(max):1到(2^31-1)个字节 | varbinary(n):可变长度,输入数据的实际长度 varbinary(max):输入的实际长度加2 |
image | 1 到 (2^31-1) 个字节 | 可变长度,输入数据的实际长度 |
七、其他数据类型
- cursor:
- sql_variant:
- timestamp:
- uniqueidentifier:
- HierarchyId:用数据表表达式(CTE)用于表现树状层次,而HierarchyId类型的字段存储了记录在层次结构中的准确位置,使用GetAncestor和GetDescendant方法可以遍历树
xml
八、用户自定义数据类型
EXEC sp_addtype no,'INT','NOT NULL' -- 创建名为“编号”的用户定义非空类型
EXEC sp_addtype name,'varchar(10)','NULL'
GO
DECLARE @id no
DECLARE @name name
SELECT TOP 1 @id = id,@name = name
FROM employee ORDER BY id DESC
PRINT @id
PRINT @name
DROP TYPE no -- 删除用户自定义类型 no
EXEC SP_DROPTYPE name -- 删除用户自定义类型 name
GO
九、用户自定义表类型
CREATE TYPE UserViewModel AS TABLE
(UserName NVARCHAR(30),Birthday DATETIME2)