求两个简单的插入表生成流水号的存储过程

trylee 2007-12-07 11:07:14
第一个
表1
sName sType sCode

Code是该表主键,也是需要生成流水号的字段。如果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-,希望尽量优化,因为涉及到可能一次添加信息两很大.请大哥们帮忙咯.明天早上结贴,写了一晚上了,睡觉勒.
...全文
153 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
中国风 2007-12-08
  • 打赏
  • 举报
回复
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

*/
trylee 2007-12-08
  • 打赏
  • 举报
回复
dawugui ()

这样的数据最好在数据库处理就很好了,用程序来处理你不认为很消耗性能吗?
先要取数据,计算好之后在insert,实在没必要多一次操作数据库的必要

马上回家测试,谢谢大家.
trylee 2007-12-08
  • 打赏
  • 举报
回复
从分层和松偶合的角度,我觉得这些应该直接交给数据库来负责更好,这样在数据层里,完全没有必要理会这个流水号的生成方式
twqmaomao1 2007-12-08
  • 打赏
  • 举报
回复
用程序语言易于维护和修改,
至于性能,找个平衡吧
-狙击手- 2007-12-07
  • 打赏
  • 举报
回复
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
dawugui 2007-12-07
  • 打赏
  • 举报
回复
这个用存储过程太没必要了吧.

还得传入两参数?

直接用程序搞定还简单些.
-狙击手- 2007-12-07
  • 打赏
  • 举报
回复
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

34,837

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧