SQL Server自动生成流水码,前缀+日期+流水码-will.miao
Access软件网QQ交流学习群(群号码198465573),欢迎您的加入!
首页 >技术文章> ADP及SQL SERVER


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

发表时间:2018/7/6 8:13:56 评论(0) 浏览(9753)  评论 | 加入收藏 | 复制
   
摘 要:数据库表单流水码单号应用
正 文:
-- =============================================
-- 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群(群号:198465573)
 
 相关文章
后台SQL Server数据库分部门费用明细自动编号  【zglsam  2008/3/4】
【access小品】看不见的美观--自动编号重排  【todaynew  2010/9/16】
SQL数据库自动编号的设置  【红月  2014/7/5】
【Access示例】多类别自动编号示例  【易勋  2014/10/22】
SQL表如何设置自动编号主键  【风行  2015/4/5】
ACCESS数据库修改自动编号的ID值为零的方法分享  【宏鹏(转载)  2015/5/1】
如何实现access自带的自动编号从1开始重新编号  【MDZZ  2017/10/23】
重置SQL Server表中的自动编号ID为1  【缪炜  2018/1/19】
常见问答
技术分类
相关资源
文章搜索
关于作者

will.miao

文章分类

文章存档

友情链接