第一个
表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
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-,希望尽量优化,因为涉及到可能一次添加信息两很大.请大哥们帮忙咯.明天早上结贴,写了一晚上了,睡觉勒.
@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
小红 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
--用函数计算最大编号:
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*/
先要取数据,计算好之后在insert,实在没必要多一次操作数据库的必要马上回家测试,谢谢大家.