我有一个表“类目表”有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
不知道我说清楚了没有,谢谢各位指教了!

解决方案 »

  1.   

    create table T(ID int identity, code varchar(20))
    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'
      

  2.   

    create procedure a @code varchar(100) as
    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
      

  3.   

    create procedure a @code varchar(100) as
    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
      

  4.   

    老大们,分我已经给了,可是我改了一下之后出了点问题.我加了一个输出参数@out,语法检查都通过了,但是为什么我在查询分析器中调用却有问题,我的调用语句是:exec CLG '0101',@ooo output    (提示必须声明变量 '@ooo')
    存储过程是:
    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
      

  5.   

    输出参数使用得时候需要建立一个变量接受得  不能直接用
    比如
    declare @e varchar(10)
    exec CLG '0101',@e output    
    select @e便可