如何重置自增长ID

-汪帆- 2010-12-09 06:20:02
自增长ID已经达到了最大上限,无法再插入记录。如何让自增长ID重新从比较小的数开始计数
...全文
369 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
永生天地 2010-12-10
  • 打赏
  • 举报
回复
numeric(35,0)
这个还不够,那就不要用自增了
dawugui 2010-12-10
  • 打赏
  • 举报
回复
[Quote=引用楼主 strwangfan 的回复:]
自增长ID已经达到了最大上限,无法再插入记录。如何让自增长ID重新从比较小的数开始计数
[/Quote]
1.取消该列的自增属性.
2.重新更新改列的值,假设字段为ID
update tb set id = (select count(1) from tb where id < t.id) + 1 from tb t
3.再次设置该列为自增列.
-汪帆- 2010-12-10
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 dawugui 的回复:]
引用楼主 strwangfan 的回复:
自增长ID已经达到了最大上限,无法再插入记录。如何让自增长ID重新从比较小的数开始计数

1.取消该列的自增属性.
2.重新更新改列的值,假设字段为ID
update tb set id = (select count(1) from tb where id < t.id) + 1 from tb t
3.再次设置该列为自增列.
[/Quote]
id在其他表中有引用,在这里值都变了,关联关系不就被破坏了吗
cxmcxm 2010-12-09
  • 打赏
  • 举报
回复
改大数的范围,修改字段类型
smallint改为int
int改为bigint或numeric(35,0)
改为numeric后应可满足要求

w568412 2010-12-09
  • 打赏
  • 举报
回复
脚印,等待超级高手来完美处理
水族杰纶 2010-12-09
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 strwangfan 的回复:]

引用 5 楼 wufeng4552 的回复:
引用 3 楼 strwangfan 的回复:

引用 1 楼 wufeng4552 的回复:
最简单的方法就是删除此列
重新添加自增列 bigint


这样会影响原来的数据

如果之前是int现在转换成bigint
你之前都用过的
重置了不是要重复了吗
这样就不能保证唯一了

自增长列是设的主键不能重复。
改成big……
[/Quote]
如果bigint都用完了
你的表也该分了
分表
-汪帆- 2010-12-09
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 wufeng4552 的回复:]
引用 3 楼 strwangfan 的回复:

引用 1 楼 wufeng4552 的回复:
最简单的方法就是删除此列
重新添加自增列 bigint


这样会影响原来的数据

如果之前是int现在转换成bigint
你之前都用过的
重置了不是要重复了吗
这样就不能保证唯一了
[/Quote]
自增长列是设的主键不能重复。
改成bigint倒是可以暂时解决问题。。
Sql 能不能从我目前未使用的最小ID开始重新计数,插入时自动跳过已使用过的ID?
水族杰纶 2010-12-09
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 strwangfan 的回复:]

引用 2 楼 dlut_liuq 的回复:
SQL code
IF OBJECT_ID('TB')IS NOT NULL DROP TABLE TB
GO
CREATE TABLE TB
(
ID INT IDENTITY,
NAME VARCHAR(10)
)

INSERT INTO TB
SELECT 'A' UNION ALL
SELECT 'B' UNION A……
[/Quote]
所以你的要求就矛盾了
重置不就重复了吗
nzperfect 2010-12-09
  • 打赏
  • 举报
回复
改成bigint类型
-汪帆- 2010-12-09
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 dlut_liuq 的回复:]
SQL code
IF OBJECT_ID('TB')IS NOT NULL DROP TABLE TB
GO
CREATE TABLE TB
(
ID INT IDENTITY,
NAME VARCHAR(10)
)

INSERT INTO TB
SELECT 'A' UNION ALL
SELECT 'B' UNION ALL
SELECT 'C' UNI……
[/Quote]
原来的数据中ID=10后面是有数据的,就会因为主键冲突无法插入。
水族杰纶 2010-12-09
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 strwangfan 的回复:]

引用 1 楼 wufeng4552 的回复:
最简单的方法就是删除此列
重新添加自增列 bigint


这样会影响原来的数据
[/Quote]
如果之前是int现在转换成bigint
你之前都用过的
重置了不是要重复了吗
这样就不能保证唯一了
王向飞 2010-12-09
  • 打赏
  • 举报
回复
IF OBJECT_ID('TB')IS NOT NULL DROP TABLE TB
GO
CREATE TABLE TB
(
ID INT IDENTITY,
NAME VARCHAR(10)
)

INSERT INTO TB
SELECT 'A' UNION ALL
SELECT 'B' UNION ALL
SELECT 'C' UNION ALL
SELECT 'D' UNION ALL
SELECT 'E' UNION ALL
SELECT 'F'


alter table TB
alter column ID bigint



INSERT INTO TB
SELECT 'A' UNION ALL
SELECT 'B' UNION ALL
SELECT 'C' UNION ALL
SELECT 'D' UNION ALL
SELECT 'E' UNION ALL
SELECT 'F'


select * from TB
-汪帆- 2010-12-09
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wufeng4552 的回复:]
最简单的方法就是删除此列
重新添加自增列 bigint
[/Quote]

这样会影响原来的数据
飘零一叶 2010-12-09
  • 打赏
  • 举报
回复
IF OBJECT_ID('TB')IS NOT NULL DROP TABLE TB
GO
CREATE TABLE TB
(
ID INT IDENTITY,
NAME VARCHAR(10)
)

INSERT INTO TB
SELECT 'A' UNION ALL
SELECT 'B' UNION ALL
SELECT 'C' UNION ALL
SELECT 'D' UNION ALL
SELECT 'E' UNION ALL
SELECT 'F'

--
dbcc checkident(TB,reseed,10) --从10开始重置

INSERT INTO TB
SELECT 'A' UNION ALL
SELECT 'B' UNION ALL
SELECT 'C' UNION ALL
SELECT 'D' UNION ALL
SELECT 'E' UNION ALL
SELECT 'F'

select * from tb
1 A
2 B
3 C
4 D
5 E
6 F
11 A
12 B
13 C
14 D
15 E
16 F
水族杰纶 2010-12-09
  • 打赏
  • 举报
回复
最简单的方法就是删除此列
重新添加自增列 bigint

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧