SQL主鍵:日期+序列

CREATE FUNCTION f_Next()
RETURNS char(12)
AS
BEGIN
    DECLARE @now varchar(8)
    DECLARE @NEW_ID bigint
    DECLARE @id varchar(12)
    set @now =  CONVERT(varchar(8), GETDATE(), 112)
    SET @NEW_ID = NULL
    SELECT top 1 @NEW_ID = CONVERT(bigint,List_No)+1 FROM [Te_List] WHERE List_No LIKE @now+'%' 
    order by List_No DESC
    if (@NEW_ID is NULL)
    set @id = @now + '0001'
    else   
    set @id = CONVERT(varchar(12),@NEW_ID)
    return @id
END
GO

简单思想 就是先找出当天最大的序号加一 再保存就OK


之前的不通用,利用动态语句修改一下让它更通用

CREATE FUNCTION f_Next
(@table_name varchar(20),@idName varchar(20))
RETURNS char(12)
AS
BEGIN
    DECLARE @now varchar(8)
    DECLARE @NEW_ID bigint
    DECLARE @id varchar(12)
    DECLARE @sql nvarchar(300)
    set @now =  CONVERT(varchar(8), GETDATE(), 112)
    SET @NEW_ID = NULL
        set @now =  CONVERT(varchar(8), GETDATE(), 112)
    SET @sql = 'SELECT top 1 @NEW_ID=CONVERT(bigint,'+@idName+')+1 from '+@table_name+
           ' where '+@idName+'LIKE ' + @now + '% order by '+@idName+' DESC'
    exec sp_executesql @sql,N'@NEW_ID AS bigint OUTPUT',@NEW_ID out
    if (@NEW_ID is NULL)
    set @id = @now + '0001'
    else   
    set @id = CONVERT(varchar(12),@NEW_ID)
    return @id
END
GO

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值