Access开发培训
网站公告
·Access专家课堂QQ群号:151711184    ·Access快速开发平台下载地址及教程    ·欢迎加入Access专家课堂微信群!    ·如何快速搜索本站文章|示例|资料    
您的位置: 首页 > 技术文章 > ADP及SQL SERVER

SQL Server自动生成流水码,前缀+日期+流水码

时 间:2018-07-06 08:13:56
作 者:缪炜   ID:24010  城市:江阴
摘 要:数据库表单流水码单号应用
正 文:

-- =============================================
-- 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


Access软件网QQ交流群 (群号:483923997)       Access源码网店

常见问答:

技术分类:

相关资源:

专栏作家

关于我们 | 服务条款 | 在线投稿 | 友情链接 | 网站统计 | 网站帮助