第一个
表1
sName sType sCodeCode是该表主键,也是需要生成流水号的字段。如果insert
Name  Type   Code
小红    01   01001
小名    01   01002
小张    02   02001
小刚    03   03001
小明    01   01003
.........表2 ,基本类似
subName subYear subType Code
同样Code也是该表主键,也是生成流水号的字段.如果insert
subName subYear subType   Code
小红       2007    01      0701001    
小名       2005    01      0501001
小张       2007    02      0702001
小刚       2006    03      0601001
小明       2007    01      0701002
小飞       2007    01      0701003上表的流水号也就是subYear字段后两位+subType+三位流水号很简单,不过SQL不熟-0-,希望尽量优化,因为涉及到可能一次添加信息两很大.请大哥们帮忙咯.明天早上结贴,写了一晚上了,睡觉勒.

解决方案 »

  1.   

    create proc procname
    @name varchar(10),
    @type varchar(2),
    @code varchar(5)
    as
    begin
        declare @s varchar(5)
        select @s = max(code) from table1 where type = @type
        insert table1
        select @name,@type,@type+ right('000'+ltrim(cast(right(@s,3) as int) + 1),3)end
      

  2.   

    subName   subYear   subType       Code 
    小红               2007         01             0701001         
    小名               2005         01             0501001 
    小张               2007         02             0702001 
    小刚               2006         03             0601001 
    小明               2007         01             0701002 
    小飞               2007         01             0701003 
    create proc procname 
    @subname varchar(10), 
    @subyear varchar(4),
    @subtype varchar(2), 
    @code varchar(7) 
    as 
    begin 
        declare @s varchar(7) 
        select @s = max(code) from table1 where subtype = @subtype and subyear = @subyear
        insert table1 
        select @subname,@subyear,@subtype,@subyear+@type+ right('000'+ltrim(cast(right(@s,3) as int) + 1),3) end
      

  3.   

    create table T1(Name nvarchar(5) ,Type nvarchar(2), Code nvarchar(5) primary key)go
    --用函数计算最大编号:
    create function T1_number(@Type nvarchar(2))
    returns nvarchar(5)
    as
    begin
    declare @s nvarchar(5)
    set @s=@Type+(select right(1000+isnull(max(Code),0)+1,3) from T1 where Type=@Type)
    return @s
    end
    go
    insert T1(Name,Type,Code) values('小红','01',dbo.T1_number('01'))
    insert T1(Name,Type,Code) values('小名','01',dbo.T1_number('01'))
    insert T1(Name,Type,Code) values('小张','02',dbo.T1_number('02'))select * from T1
    /*
    Name  Type Code  
    ----- ---- ----- 
    小红    01   01001
    小名    01   01002
    小张    02   02001*/
      

  4.   

    dawugui ()这样的数据最好在数据库处理就很好了,用程序来处理你不认为很消耗性能吗?
    先要取数据,计算好之后在insert,实在没必要多一次操作数据库的必要马上回家测试,谢谢大家.