通過SQL自動新增流水號

2021-10-10 23:20:14 字數 2665 閱讀 6475

專案中往往有一些單據流水號或者流程流水號是希望通過新增一條記錄後自動產生乙個編號的,比如新增一條流程就自動根據當前日期自動新增該流程的流程流水號,下面介紹兩種不同型別流水號通過sql自動產生的方法。

流水號格式:

第一種(數值型別):日期+流水號,比如「201104190001」-->"201104190002"; 

第二種(文字型別):字首+日期+流水號,比如「wt201104190001」-->"wt201104190002"。

不論哪種情況,流水號的生成原則都是一樣的,流水號的產生都需要根據當前日期產生,新增的一條記錄的流水號為當前日期下所有記錄中流水號最大那條加1得來。

一、資料庫中新增乙個表:testno

列名       資料型別                   說明

id         uniqueidentifier          主鍵

no         bigint                        流水號字段,不過是純數字型的流水號,這個為本例子的第一種情況,流水號可以為純數字

dt         datetime                   新增一條記錄的當前時間,相信每新增一條記錄都會記錄這次操作的當前時間的。

charno   varchar(50)               流水號字段,不過是可以有字元的流水號,這個為本例子的第二種情況。

二、sql**

------

--自動流水號為純數字的情況,如 201104190005

------

declare

@x int,

@y char(8)

select @x= count(no) from testno where cast(dt as date)=cast(getdate() as date)

if(@x=0)

begin

select @y=convert(char(8),getdate(),112)

insert testno(no,dt) values(

@y+'0001'

,getdate())

endelse

insert testno(no,dt) values(

(select max(no)+1 from testno where cast(dt as date)=cast(getdate() as date))

,getdate())

select * from testno

------

--自動流水號為字元的情況,如 wt201104190005

------

declare

@x1 int,

@y1 char(8)

select @x1= count(charno) from testno where cast(dt as date)=cast(getdate() as date)

if(@x1=0)

begin

select @y1=convert(char(8),getdate(),112)

insert testno(charno,dt) values(

'wt'+@y1+'0001'

,getdate())

endelse

begin

insert testno(charno,dt) values(

'wt'+cast((select max(cast( substring(charno,3,12) as bigint))+1 from testno where cast(dt as date)=cast(getdate() as date))as varchar(50))

,getdate())

endselect * from testno

三、自己改寫的例子(假如表中沒有現成的建立時間)

alter function [dbo].[udf_generatecutsampleno]()  

returns varchar(20)  

as  

begin  

declare @rtn varchar(20)

--每日流水號歸零

declare @countoftoday int,@ymd char(8)

--如果「id」裡沒有今天的資料

select @countoftoday= count(1) from dbo.cutsampledtl where cast(right(left(sample_no,9),8) as date)=cast(getdate() as date)

if(@countoftoday=0)

begin

select @ymd=convert(char(8),getdate(),112)

set @rtn= 'd'+@ymd+'0001'

endelse

begin

set @rtn= 'd'+cast((select max(cast( substring(sample_no,2,12) as bigint))+1 from dbo.cutsampledtl)as varchar(50))

endreturn @rtn

end

SQL自動生成流水號

select convert char 6 getdate 12 下面的 生成長度為8的編號,編號以bh開頭,其餘6位為流水號。得到新編號的函式 create function f nextbh returns char 8 asbegin 從表裡得到最大值加個1000001就增乙個1 return...

SQL生成流水號

經過了幾次的測試終於成功了 declare year int,month int,day int,temp no varchar 12 needno varchar 4 no varchar 20 number varchar 50 randno varchar 50 nu varchar 10 s...

sql 生成流水號

mysql生成流水號 select lpad ifnull max substring business order code,3,4 1,1 4,0 as waternumber from bh customer info business order code的值為前面兩位英文,後面四位數字,例...