int、bigint、smallint 和 tinyint (Transact-SQL)
使用整数数据的精确数字数据类型。
数据类型 |
范围 |
存储 |
---|---|---|
bigint |
-2^63 (-9,223,372,036,854,775,808) 到 2^63-1 (9,223,372,036,854,775,807) |
8 字节 |
int |
-2^31 (-2,147,483,648) 到 2^31-1 (2,147,483,647) |
4 字节 |
smallint |
-2^15 (-32,768) 到 2^15-1 (32,767) |
2 字节 |
tinyint |
0 到 255 |
1 字节 |
在数据类型优先次序表中,bigint 介于 smallmoney 和 int 之间。
仅当参数表达式为 bigint 数据类型时,函数才返回 bigint。 SQL Server 不会自动将其他整数数据类型(tinyint、smallint 和 int)提升到 bigint。
注 |
---|
使用 +、-、*、/ 或 % 等算术运算符将 int、smallint、tinyint 或 bigint 常量值隐式或显式转换为 float、real、decimal 或 numeric 数据类型时,SQL Server 计算数据类型和表达式结果的精度时应用的规则有所不同,这取决于查询是否是自动参数化的。 因此,查询中的类似表达式有时可能会生成不同的结果。 如果查询不是自动参数化的,则将常量值转换为指定的数据类型之前,首先将其转换为 numeric,该数据类型的精度很大足以保存常量的值。 例如,常量值 1 转换为 numeric (1, 0),常量值 250 转换为 numeric (3, 0)。 如果查询是自动参数化的,则将常量值转换为最终数据类型之前,始终先将其转换为 numeric (10, 0)。 如果涉及 / 运算符,则对于类似查询而言,不仅结果类型的精度可能不同,而且结果值也可能不同。 例如,包含表达式 SELECT CAST (1.0 / 7 AS float) 的自动参数化查询的结果值将不同于非自动参数化的同一查询的结果值,因为自动参数化查询的结果将被截断以适合 numeric (10, 0) 数据类型。 |
下面的示例使用 bigint、int、smallint 和 tinyint 数据类型创建一个表。 值插入到每列中并在 SELECT 语句中返回。
CREATE TABLE dbo.MyTable ( MyBigIntColumn bigint ,MyIntColumn int ,MySmallIntColumn smallint ,MyTinyIntColumn tinyint ); GO INSERT INTO dbo.MyTable VALUES (9223372036854775807, 214483647,32767,255); GO SELECT MyBigIntColumn, MyIntColumn, MySmallIntColumn, MyTinyIntColumn FROM dbo.MyTable;
下面是结果集:
MyBigIntColumn MyIntColumn MySmallIntColumn MyTinyIntColumn -------------------- ----------- ---------------- --------------- 9223372036854775807 214483647 32767 255 (1 row(s) affected)
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。