所需时间 英文:如何将SQL表中不连续编号重写为连续编号??

来源:百度文库 编辑:高考问答 时间:2024/04/28 02:04:12
在SQL server2000数据库中,有一个表中的一个字段为spbh(商品编号)原来其编号是连续的,后经删除等操作,其编号已不是连续的了,我想用SQL语句重写该字段的编号为连续的编号,请问各位高手该如何与此SQL语句??本人万分感谢!!
我看到过有人用SQL语句将原spbh字段的内容删除后,又用SQL语句重写了这个字段,这个字段值的开头必须是以SPH打头后面是00000001、00000002……如:
SPH00000001

在缓存状态下重新生成标识列
SET IDENTITY_INSERT Table1 ON
DECLARE @i int
Set @i = 0
Update 表1 Set @i = @i + 1,列1 = 'SPH'+right('00000000'+convert(varchar(8),@i),8)
SET IDENTITY_INSERT Table1 OFF

只能先把spbh字段先删除,然后再重新创建一个identity类型的spbh字段,不过这样做的话,identity列就跑到表的最后边了。其实通过更新系统表,能改变identity列的位置,不过比较麻烦,搂主想了解的话可以提出来,我抽空再写出来。如果对列的位置不太要求的话就省事了:)

alter table 表
drop column spbh

go

alter table 表
add spbh int identity

go

-------------------------
你的表自增的字段是字符串,那一定是程序在插入的过程中自动增加的,如果表结构不能更改,那只能用游标来一条一条的更新了,数据量很大的话,效率很低的。

如果表结构可以变得,那我可以告诉你一种方法。

首先增加一个新的identity列,如果原来有的话,要先drop掉

--创建自增列newids
alter table 表
add newids identity

--将spbh字段删除
alter table 表
drop column spbh

--添加一个计算列spbh
alter table 表
add spbh as 'SPH'+right('00000000'+cast(newids as varchar(8)),8)

--也就是将spbh字段设置为计算列,这样它的值就是由newids这个字段来确定了。计算列的值就是SPH00000001这种形式了。

比较麻烦
保险的情况下是做个存储过程 逐条改