Fid type ffid idx
01 计算机耗材 00
0101 打印机 01
010101 墨盒 0101
0102 复印机 01
010201 碳粉 0102(三级编码)
FID为物品编码,FFID为该物品所属的上级的类型编码,ffid=00 的 编码 fid为主类型
如:fid=01 的编码我改成 02,则下列相关的编码都要改变为
Fid type ffid idx
02 计算机耗材 00
0201 打印机 02
020101 墨盒 0201
0202 复印机 02
020201 碳粉 0202请问在sqlserver中如何实现修改
01 计算机耗材 00
0101 打印机 01
010101 墨盒 0101
0102 复印机 01
010201 碳粉 0102(三级编码)
FID为物品编码,FFID为该物品所属的上级的类型编码,ffid=00 的 编码 fid为主类型
如:fid=01 的编码我改成 02,则下列相关的编码都要改变为
Fid type ffid idx
02 计算机耗材 00
0201 打印机 02
020101 墨盒 0201
0202 复印机 02
020201 碳粉 0202请问在sqlserver中如何实现修改
create table table1
(
Fid varchar(10),
type varchar(20),
ffid varchar(10),
idx varchar(10)
)insert into table1 select '01', '计算机耗材', '00',''
insert into table1 select '0101', '打印机', '01',''
insert into table1 select '010101', '墨盒' , '0101',''
insert into table1 select '0102', '复印机', '01',''
insert into table1 select '010201', '碳粉' , '0102',''--语句(这里把你原来的id跟新的id都写成了变量,你在语句中直接写就可以了)
declare @oldid varchar(10)
declare @newid varchar(10)set @oldid = '0102'
set @newid = '02'
--更新Fid
update table1 set Fid = @newid + substring(Fid,len(@oldid)+1,len(Fid) - len(@oldid))
where left(Fid,len(@oldid)) = @oldid
--更新ffid
update table1 set ffid = @newid + substring(ffid,len(@oldid)+1,len(ffid) - len(@oldid))
where left(ffid,len(@oldid)) = @oldid--这个语句同样适合于代码级别的更改,比如把0102改成02,这样他的级别就发生了变化,
但是0102这条记录的ffid在语句里是不能更改的,需要你自己更改
--同级变更
declare @oldid varchar(10)
declare @newid varchar(10)set @oldid = '01'
set @newid = '02'
--更新Fid
update table1 set Fid = @newid + substring(Fid,len(@oldid)+1,len(Fid) - len(@oldid))
where left(Fid,len(@oldid)) = @oldid
--更新ffid
update table1 set ffid = @newid + substring(ffid,len(@oldid)+1,len(ffid) - len(@oldid))
where left(ffid,len(@oldid)) = @oldid--原数据:
01 计算机耗材 00
0101 打印机 01
010101 墨盒 0101
0102 复印机 01
010201 碳粉 0102 --更改后的数据
02 计算机耗材 00
0201 打印机 02
020101 墨盒 0201
0202 复印机 02
020201 碳粉 0202
--异级变更
declare @oldid varchar(10)
declare @newid varchar(10)set @oldid = '0102'
set @newid = '02'update table1 set Fid = @newid + substring(Fid,len(@oldid)+1,len(Fid) - len(@oldid))
where left(Fid,len(@oldid)) = @oldidupdate table1 set ffid = @newid + substring(ffid,len(@oldid)+1,len(ffid) - len(@oldid))
where left(ffid,len(@oldid)) = @oldid--原数据
01 计算机耗材 00
0101 打印机 01
010101 墨盒 0101
0102 复印机 01
010201 碳粉 0102 --更新后的数据
01 计算机耗材 00
0101 打印机 01
010101 墨盒 0101
02 复印机 01
0201 碳粉 02注意:这个时候02的上级应该不是01了,但是这个语句是更改不了的
Fid type ffid idx
01 计算机耗材 00
0101 打印机 01
010101 墨盒 0101
0102 复印机 01
010201 碳粉 0102
----------------------------------------------
update TableName
set Fid=replace(left(Fid,2),'01','02')+isnull(right(Fid,len(Fid)-2),'')
,ffid=replace(left(Fid,2),'01','02')+isnull(right(Fid,len(Fid)-2),'')