-- =============================================
-- Create author: bob <hy12.com>
-- Create date: <2015-04-24>
-- Description: <自动生成流水码,前缀+日期+流水码>
-- 日期模式: 0 年月日 e.g.:150424
-- 1 年月 e.g.:1504
-- 2 年 e.g.:15
-- =============================================
Create PROCEDURE [dbo].[AutoNo] (
@prefix varchar(10), --前缀字母
@mode int, --日期模式
@nolen varchar(10), --流水号长度
@listna varchar(20), --流水单号对应的列名,建议索引
@tablena varchar(20),--表名
@runningnum varchar(20) output)--生成流水码
AS
BEGIN
SET NOCOUNT ON;
declare @sql nvarchar(200)
declare @num int
if (@mode=0)
begin
--查询表获取当天最大流水号语句,当日期模式为年月日
set @sql = 'select isnull(max(convert(int,substring('+@listna+',len('+@listna+')-'+@nolen+'+1,'+@nolen+'))),0)+1 from '+@tablena
+' where substring('+@listna+',len('+@listna+')-5-'+@nolen+',6)=convert(varchar(100),getdate(),12)'
end
else if (@mode=1)
begin
--查询表获取当天最大流水号语句,当日期模式为年月
set @sql = 'select isnull(max(convert(int,substring('+@listna+',len('+@listna+')-'+@nolen+'+1,'+@nolen+'))),0)+1 from '+@tablena
+' where substring('+@listna+',len('+@listna+')-3-'+@nolen+',4)=convert(varchar(4),getdate(),12)'
end
else
begin
--查询表获取当天最大流水号语句,当日期模式为年
set @sql = 'select isnull(max(convert(int,substring('+@listna+',len('+@listna+')-'+@nolen+'+1,'+@nolen+'))),0)+1 from '+@tablena
+' where substring('+@listna+',len('+@listna+')-1-'+@nolen+',2)=convert(varchar(2),getdate(),12)'
end
--创建临时表,获取最大流水号值
create table #temp (Total int);
insert into #temp EXEC(@sql);
set @num = (Select Total FROM #temp)
if (@mode=0)
begin
--拼接流水号,当日期模式为年月日
set @runningnum = @prefix+CONVERT(varchar(100),GETDATE(),12)+replicate('0',@nolen-len(@num))+convert(varchar(20),@num)
end
else if (@mode=1)
begin
--拼接流水号,当日期模式为年月
set @runningnum = @prefix+CONVERT(varchar(4),GETDATE(),12)+replicate('0',@nolen-len(@num))+convert(varchar(20),@num)
end
else
begin
--拼接流水号,当日期模式为年
set @runningnum = @prefix+CONVERT(varchar(2),GETDATE(),12)+replicate('0',@nolen-len(@num))+convert(varchar(20),@num)
end
select @runningnum
END