日期:2014-05-17  浏览次数:20567 次

求一个批量生成单号的存储过程
如果用户在一个表格里面输入了多行数据,点击保存后,先将数据保存到临时表,插入的数据每行都有唯一的rowid,然后从临时表将数据保存到VisitDetail,生成单据。

有表:VisitDetail
列:doccode,formid,docdate,Visittime,传入存储过程的参数为rowid,formid,docdate,Visittime
doccode 为单号列,现在需要批量生成单据到VisitDetail,单号表现为前缀:BF,加当前服务器时间:yyy-mm-dd,加6位流水号。流水号为在已有单据的基础上垒加。'BF'+'YYYY-MM-DD'+'流水号'。

------解决方案--------------------
select @maxno =doccode from visitdetail where substring(doccode,3,10)=convert(varchar(10),getdate(),120)

insert into visitdetail(doccode,formid,docdate,visittime)
select 'BF'+convert(varchar(10),getdate(),120)+convert(varchar,@maxno+number),formid,docdate,visittime
from master..spt_values
where type = 'p' and number >0

--类似这样,不过仍需要更多的条件,lz自己调一下

------解决方案--------------------
if object_id('pr_cVisitDetail') Is not null
drop procedure pr_cVisitDetail
Go
Create procedure pr_cVisitDetail(
@rowid int
,@formid int
,@docdate datetime
,@Visittime datetime
)
As

Declare @date datetime

Set @Date=getdate()

If object_id('tempdb..#VisitDetail')is not null
drop table #VisitDetail
Select 
@rowid
,@formid
,@docdate
,@Visittime
,right(Cast('1'+isnull((Select Max(right(doccode,6)) From VisitDetail Where Substring(doccode,3,10)=Convert(varchar(10),@Date,120)),'000000') As int)+1,6)As SerialNo
Into #VisitDetail


Insert into VisitDetail(doccode,formid,docdate,Visittime)
Select
'BF'+Convert(varchar(10),@Date,120)+SerialNo,formid,docdate,Visittime
From #VisitDetail