请问下如何如何循环+1进行update

xiaobaoak 2015-10-28 01:08:25
我原来的条码是8位数 有一部分数据00开头的 我现在要把这些00开头的8位数条码全部修改成5位数00开头的
然后顺着往下面排00001,00002

这样的

select * from PCode_Materiel where fbarcode like '00%'

PCode_Materiel是表名

fbarcode是需要修改的列

是否先对00开头的8位数条码进行清空为空值 然后在写循环语句为空列插入值?

感谢..刚接触数据库不久...只懂点皮毛...这个貌似要用到存储过程...请教各位大侠了
...全文
107 点赞 收藏 6
写回复
6 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
hleb231 2015-10-28


select * from PCode_Materiel where fbarcode like'00%'
go
update PCode_Materiel set fbarcode='' where fbarcode like '00%'
go
declare @i varchar(20)
declare @y varchar(20)
set @i=0
set @y='0000'
UPDATE PCode_Materiel
set @i=@i+1,fbarcode=@y+@i
where fbarcode = ''
go
update PCode_Materiel set fbarcode= right(fbarcode,5)
where fbarcode like '00%'
回复
xiaobaoak 2015-10-28
--1.查询表里00开头的条形码
select fMaterielNo,fbarcode from PCode_Materiel where fbarcode like '00%'
--2.把00开头的条形码删除为空
update PCode_Materiel set fbarcode='' where fbarcode like '00%'
--3.查询条形码为空的列
select * from PCode_Materiel where fbarcode =''
--4.循环插入条形码
declare @i varchar(20)
set @i='00001'
UPDATE PCode_Materiel
set @i=@i+1,fbarcode=@i
where fbarcode = ''

--5.给插入后的数据添加0
UPDATE PCode_Materiel set fbarcode = right('0000'+ fbarcode,6)

--6.给插入后的数据删除第一位0
update PCode_Materiel set fbarcode=Right([fbarcode],(len([fbarcode])-1)) where fbarcode like '00%'

/*==============================================================================================*/
select right('0000'+ fbarcode,6) from PCode_Materiel

select fMaterielNo,fBarCode from PCode_Materiel

--RIGHT(100000000+字段名,8)
回复
xiaobaoak 2015-10-28
[code=sql]--1.查询表里00开头的条形码 select fMaterielNo,fbarcode from PCode_Materiel where fbarcode like '00%' --2.把00开头的条形码删除为空 update PCode_Materiel set fbarcode='' where fbarcode like '00%' --3.查询条形码为空的列 select * from PCode_Materiel where fbarcode ='' --4.循环插入条形码 declare @i varchar(20) set @i='00001' UPDATE PCode_Materiel set @i=@i+1,fbarcode=@i where fbarcode = '' --5.给插入后的数据添加0 UPDATE PCode_Materiel set fbarcode = right('0000'+ fbarcode,6) --6.给插入后的数据删除第一位0 update PCode_Materiel set fbarcode=Right([fbarcode],(len([fbarcode])-1)) where fbarcode like '00%' /*==============================================================================================*/ select right('0000'+ fbarcode,6) from PCode_Materiel select fMaterielNo,fBarCode from PCode_Materiel --RIGHT(100000000+字段名,8)/code] ...百度加自己的所掌握的东拼西凑的算是拼出来了...还有几个是4位数 手工在软件里改下好了...唉
回复
qq_17482963 2015-10-28
引用 2 楼 xiaobaoak 的回复:
select fMaterielNo,fbarcode from PCode_Materiel where fbarcode like '00%'
select * from PCode_Materiel where fbarcode =''

update PCode_Materiel set fbarcode='' where fbarcode like '00%'

declare @i varchar(20)
set @i='00001'
UPDATE PCode_Materiel
set @i=@i+1,fbarcode=@i
where fbarcode = ''
我是这样写的..能插入..但是结果都不带0 都是1 2 3 4 5 6 这样的...不知道是什么原因
因为@i=@i+1这里@i与int类型相加了 所以那些0都去掉了
回复
xiaobaoak 2015-10-28
select fMaterielNo,fbarcode from PCode_Materiel where fbarcode like '00%'
select * from PCode_Materiel where fbarcode =''

update PCode_Materiel set fbarcode='' where fbarcode like '00%'

declare @i varchar(20)
set @i='00001'
UPDATE PCode_Materiel
set @i=@i+1,fbarcode=@i
where fbarcode = ''
我是这样写的..能插入..但是结果都不带0 都是1 2 3 4 5 6 这样的...不知道是什么原因
回复
qq_17482963 2015-10-28
update A set 条码=left('00000',5-LEN(b.rn))+convert(nvarchar(5),b.rn) from tableA A
left join (select ROW_NUMBER()over(order by 条码)rn,* from tableA where LEFT(条码,2)='00' and LEN(条码)=8) B on a.条码=b.条码
where LEFT(A.条码,2)='00' and LEN(A.条码)=8
试试这个 你先把你的数据备份一份再测试吧 看看有没有问题
回复
相关推荐
发帖
疑难问题
创建于2007-09-28

2.1w+

社区成员

MS-SQL Server 疑难问题
申请成为版主
帖子事件
创建了帖子
2015-10-28 01:08
社区公告
暂无公告