- -- =============================================
- -- 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
- --该片段来自于http://www.codesnippet.cn/detail/1808201614948.html
来源: http://www.codesnippet.cn/detail/1808201614948.html