自动编号函数

根据表中已经存在的编号产生一个新编号,只需要传入标识,表,字段。

可复用。

/*******************************************
**过程名:[[Proc_CreateCode]]
**输入参数:
**输出:
**功能描述:根据开头标识在表中获取最新编号
**作者:
**更新:修改人xxx;修改日期xxxx
**版本:
********************************************/
create Procedure [dbo].[Proc_CreateCode]
 @head Varchar(5),    --开头标识
 @table Varchar(50),  --表名
 @Key Varchar(20),    --编号字段
 @Code varchar(20) Out--新编号
 As
 Begin
    Declare @sql Nvarchar(2000)=''
    --拼接查询最大ID语句
    Set @sql='Select @MaxID=Max('+@Key+') From '+@table+' where left('+@Key+',2)='''+@head+''' '
    Exec Sp_executesql @sql,N'@MaxID varchar(20) out',@Code Out
    print @sql
    --当前日期
    Declare @NowDate Varchar(8)
    Select @NowDate=CONVERT(Varchar,GETDATE(),112)
    If(@Code Is Null Or @Code='')
    Begin
        Set @Code = @head+@NowDate+'001'
    End
    Else
    Begin
        IF(CHARINDEX(@NowDate,@Code)=0)
        Begin
            Set @Code = @head+@NowDate+'001'
        End
        Else
        Begin
            --获取最大ID的编号部分
            Declare @num int=0
            Set @num=right(@Code,3)+1
            --生成新ID
            Set @Code = @head+@NowDate+Substring('000',1,3-len(@num))+Convert(Varchar,@num)
        End
    End    
 End
**********初心不改,方得始终。
原文地址:https://www.cnblogs.com/salv/p/9957705.html