表fq
  id      lcbh       parent
   1      p00001      0
   2      p0000101    1
   3      p0000102    1
   4      p000010101  2Create   PROC fq
@ID int
ASIF EXISTS(SELECT MAX(lcbh) FROM fq WHERE parent = @ID)
begin在这里我想表达如果存在的话在最大的lcbh最后两位加1,如id为1时,现在最大的lcbh为p0000102,则我想得到p0000103,如果不存在只要原lcbh+'01'如id为3时,得到
p0000102+'01',结果为p000010201,下面的代码怎么写呀

解决方案 »

  1.   

    一條記錄同樣能返回max(lcbh),你說的不存在是parent = @ID只有一條記錄,返回2條則有最大?
      

  2.   

    Create  PROC pr_fq 
    @ID int ,
    @lcbh varchar(50) output    --返回参数
    AS 
    set @lcbh=null
    SELECT @lcbh=MAX(lcbh) FROM fq WHERE parent = @ID
    set @lcbh=left(@lcbh,len(@lcbh)-2)+right('00'+cast(cast(right(@lcbh,2) as int)+1 as varchar),2)
    if @lcbh is null
       SELECT @lcbh=lcbh+'01' FROM fq WHERE id = @ID
    go
      

  3.   

    create table fq (
      id      int,
      lcbh      varchar(50),
      parent int
      )
    insert fq select  
      1,      'p00001'    ,  0 
    union all select  
      2,      'p0000101'   , 1 
    union all select  
      3,      'p0000102'    ,1 
    union all select  
      4,      'p000010101'  ,2 
    goCreate  PROC pr_fq 
    @ID int ,
    @lcbh varchar(50) output    --返回参数
    AS 
    set @lcbh=null
    SELECT @lcbh=MAX(lcbh) FROM fq WHERE parent = @ID
    set @lcbh=left(@lcbh,len(@lcbh)-2)+right('00'+cast(cast(right(@lcbh,2) as int)+1 as varchar),2)
    if @lcbh is null
       SELECT @lcbh=lcbh+'01' FROM fq WHERE id = @ID
    godeclare @r varchar(50)
    exec pr_fq 1,@r output
    select @r--结果
    --------------------------------------------------
    p0000103(1 行受影响)
    declare @r varchar(50)
    exec pr_fq 3,@r output
    select @r--结果--------------------------------------------------
    p000010201(1 行受影响)
      

  4.   

    if object_id('[fq]') is not null drop table [fq]
    go
    create table [fq]([id] int,[lcbh] varchar(20),[parent] int)
    insert [fq]
    select 1,'p00001',0 union all
    select 2,'p0000101',1 union all
    select 3,'p0000102',1 union all
    select 4,'p000010101',2select * from [fq]if object_id(N'proc_fq',N'P') is not null drop proc proc_fq
    go
    create proc proc_fq
    @id int
    as
    begin
    declare @newbh varchar(20)
    select @newbh=isnull(left(max(lcbh),len(max(lcbh))-2)+right(101+right(max(lcbh),2),2),(select lcbh+'01' from fq where id=@id))
    from fq
    where parent=@id
    select @newbh
    end
    go--测试结果:
    exec proc_fq 1
    /*
    p0000103
    */
    exec proc_fq 3
    /*
    p000010201
    */
      

  5.   

    如果沒有parent = @ID對應的紀錄,在lcbh+'01',這個原lcbh怎麼得到?表裡任意一條記錄的lcbh?
      

  6.   

    我想问为什么 exec pr_fq 1,p00001没有返回值呀,我对sql不太懂,见笑了
      

  7.   

    或者你改成Create  PROC pr_fq 
    @ID int 
    AS declare @lcbh varchar(50) 
    SELECT @lcbh=MAX(lcbh) FROM fq WHERE parent = @ID
    set @lcbh=left(@lcbh,len(@lcbh)-2)+right('00'+cast(cast(right(@lcbh,2) as int)+1 as varchar),2)
    if @lcbh is null
       SELECT @lcbh=lcbh+'01' FROM fq WHERE id = @ID
    select @lcbh as lcbh
    go--调用
    exec pr_fq 1