华为麦芒3s电信版价格:如何将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这种形式了。
比较麻烦
保险的情况下是做个存储过程 逐条改