使用整数数据的精确数字数据类型。 sql
数据类型 express |
范围 app |
存储 函数 |
---|---|---|
bigint ui |
-2^63 (-9,223,372,036,854,775,808) 到 2^63-1 (9,223,372,036,854,775,807) spa |
8 字节 3d |
int code |
-2^31 (-2,147,483,648) 到 2^31-1 (2,147,483,647) orm |
4 字节 blog |
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)