如何将SQL表中不连续编号重写为连续编号??

在SQLserver2000数据库中,有一个表中的一个字段为spbh(商品编号)原来其编号是连续的,后经删除等操作,其编号已不是连续的了,我想用SQL语句重写该字段的编号... 在SQL server2000数据库中,有一个表中的一个字段为spbh(商品编号)原来其编号是连续的,后经删除等操作,其编号已不是连续的了,我想用SQL语句重写该字段的编号为连续的编号,请问各位高手该如何与此SQL语句??本人万分感谢!!
我看到过有人用SQL语句将原spbh字段的内容删除后,又用SQL语句重写了这个字段,这个字段值的开头必须是以SPH打头后面是00000001、00000002……如:
SPH00000001
展开
 我来答
百度网友5c91d28
2006-04-21 · TA获得超过5085个赞
知道大有可为答主
回答量:1916
采纳率:50%
帮助的人:1806万
展开全部
只能先把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这种形式了。
abingpow
2006-04-28 · TA获得超过2208个赞
知道大有可为答主
回答量:2830
采纳率:0%
帮助的人:2359万
展开全部
在缓存状态下重新生成标识列
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
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
巨曜瑞344
2006-04-21 · TA获得超过137个赞
知道答主
回答量:252
采纳率:0%
帮助的人:163万
展开全部
比较麻烦
保险的情况下是做个存储过程 逐条改
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式