SQL的编号列的问题

来源:百度知道 编辑:UC知道 时间:2024/05/11 05:51:55
现在有一个SQL表AA,其字段A为自动增加列,当我增加了50条记录之后,删掉了3条记录,但我新增一条记录后,他的A列值却为51,为什么不是48呢????请问有什么办法可以解决此问题!????????

你创建一个表,把其中一个列(比如“ID”)的“标识列”属性设为“是”,然后设置它的种子(初始值)、递增量。比如你按默认设定种子为1、递增量为1,那么生成的ID序列就会是:1、2、3、4、……

在记录不是特别多(>1000万条)时,这个值是唯一的,也就是不会出现两者相同的情况。

但这样会有一个问题,比如你顺序生成了10条记录:

1、2、3、4、5、6、7、8、9、10

然后你删除了3号记录,这样剩下的记录就是:

1、2、4、5、6、7、8、9、10

如果你希望编号是从1累加到,中间不隔断,那你就要设定另一个非标识列比如“number”。然后在添加新记录时使用:

select @number=max(number) from tablename
insert tablename(number) values(@number+1)

------------------------
以上使用SQL语句示范,假定你使用存储过程操作数据库,如果你使用ASP,就这样:
psql="select max(number) as maxnumber from tablename"
rs.open psql,conn,3,3
maxnumber=rs("maxnumber")
将最大number值读出,然后加1,再用于你的数据添加语句。
------------------------

这样就可以手动生成编号了,然后在删除记录的时候这样写程序:

' 假定要删除的记录编号为@n

delete tablename where number=@n

update tablename set number=number-1 where number>@n

这样就会在删除记录后重新整理编号顺序了。=========================