我有一个表“类目表”有2个字段ID(标志,自动增长),code(varchar)
假如开始表中有几行数据code分别为01,0101,0102,0103
我想写一个存储过程,参数有一个,为@code varchar
实现,输入则在表中添加数据0104,(相当于字段code以2个位为一个层,01层下有0101 0102 0103)在01层下根据后面两位最大值+1则为新值
再输入01的话则在0104基础上+1为0105
输入0101的话,则插入010101,再输入0101则在010101基础上加1得到010102
不知道我说清楚了没有,谢谢各位指教了!
假如开始表中有几行数据code分别为01,0101,0102,0103
我想写一个存储过程,参数有一个,为@code varchar
实现,输入则在表中添加数据0104,(相当于字段code以2个位为一个层,01层下有0101 0102 0103)在01层下根据后面两位最大值+1则为新值
再输入01的话则在0104基础上+1为0105
输入0101的话,则插入010101,再输入0101则在010101基础上加1得到010102
不知道我说清楚了没有,谢谢各位指教了!
go
insert T select '01'
insert T select '0101'
insert T select '0102'
insert T select '0103'
go
create proc pc
@code varchar(20)
asdeclare @newCode varchar(20)
select @newCode=max(code) from T
where code like @code+'%' and len(code)>len(@code)if @newCode is null
set @newCode=@code+'01'
else
set @newCode='0'+rtrim(cast(@newCode as int)+1)insert T(code) select @newCode
go
exec pc '01'
exec pc '01'
exec pc '0101'
exec pc '0101'
declare @a int
declare @b varchar(100)
select @a = len(@code)
select @b = max(code)+1 from 类目表 where left(code,@a)=@code
insert into 类目表 values (@b)
go
declare @a int
declare @b varchar(100)
select @a = len(@code)
if exists (select code from 类目表 where left(code,@a)=@code)
select @b = max(code)+1 from 类目表 where left(code,@a)=@code
else
select @b = @code+'01'
insert into 类目表 values (@b)
go
存储过程是:
CREATE procedure CLG @code varchar(100),
@out varchar(10) output
as
declare @a int
declare @b varchar(100)
select @a = len(@code)
if exists (select code from 类目表 where left(code,@a)=@code and len(code)=@a+2)
begin
select @b = max(code)+1 from 类目表 where left(code,@a)=@code and len(code)=@a+2
if (len(@b)%2<>0)
begin
select @b='0'+@b
end
end
else
select @b = @code+'01'
insert into 类目表(code,CLG_NAME) values (@b,'G')
select @out=@b
GO
比如
declare @e varchar(10)
exec CLG '0101',@e output
select @e便可