IDENTITY标识列为int类型,取值范围为-2^32到2^31-1。当增长值超过这个最大值时,我在SQL Server 2008 R2 x64上试验的结果是:
将 IDENTITY 转换为数据类型 int 时出现算术溢出错误。
-
一般解决方案:
1,)如果该column为主键,则删除主键:
alter table [tablename] drop [pkname];
2,)修改该column的数据类型为bigint:
alter table [tablename] alter column [column name] bigint;
这种方案的操作步骤:
-
)将[tablename] 表中的记录插入到临时表,
-
)之后清掉[tablename] 中的记录,
-
)修改[column name] 的数据类型,
-
) 从临时表中的记录插回表[tablename],释放临时表。
这种方案会产生大量日志。
-
手动处理方案:
-
)自己新建一种表[tablename_new] ,设定[column name] bigint
-
)将[tablename]中的记录插入到表[tablename_new];
-
)删除表[tablename],修改表[tablename_new]名称为[tablename]。
int、bigint、smallint 和 tinyint
使用整数数据的精确数字数据类型。
bigint
从 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 的整型数据(所有数字)。存储大小为 8 个字节。
从 -2^31 (-2,147,483,648) 到 2^31 - 1 (2,147,483,647) 的整型数据(所有数字)。存储大小为 4 个字节。
int
的 SQL-92 同义字为
integer
。
smallint
从 -2^15 (-32,768) 到 2^15 - 1 (32,767) 的整型数据。存储大小为 2 个字节。
tinyint
从 0 到 255 的整型数据。存储大小为 1 字节。
在支持整数值的地方支持
bigint
数据类型。但是,
bigint
用于某些特殊的情况,当整数值超过
int
数据类型支持的范围时,就可以采用
bigint
。在 SQL Server 中,
int
数据类型是主要的整数数据类型。
在数据类型优先次序表中,
bigint
位于
smallmoney
和
int
之间。
只有当参数表达式是
bigint
数据类型时,函数才返回
bigint
。SQL Server 不会自动将其它整数数据类型(
tinyint
、
smallint
和
int
)提升为
bigint
。
基础才是编程人员应该深入研究的问题,比如:
1)List/Set/Map内部组成原理|区别
2)mysql索引存储结构&如何调优/b-tree特点、计算复杂度及影响复杂度的因素。。。
3)JVM运行组成与原理及调优
4)Java类加载器运行原理
5)Java中GC过程原理|使用的回收算法原理
6)Redis中hash一致性实现及与hash其他区别
7)Java多线程、线程池开发、管理Lock与Synchroined区别
8)Spring IOC/AOP 原理;加载过程的。。。
【
+加关注
】。