通过SQL自动添加流水号
項目中往往有一些單據(jù)流水號或者流程流水號是希望通過新增一條記錄后自動產(chǎn)生一個編號的,比如新增一條流程就自動根據(jù)當(dāng)前日期自動添加該流程的流程流水號,下面介紹兩種不同類型流水號通過SQL自動產(chǎn)生的方法。
流水號格式:
第一種(數(shù)值類型):日期+流水號,比如“201104190001”-->"201104190002";
第二種(文本類型):前綴+日期+流水號,比如“WT201104190001”-->"WT201104190002"。
不論哪種情況,流水號的生成原則都是一樣的,流水號的產(chǎn)生都需要根據(jù)當(dāng)前日期產(chǎn)生,新增的一條記錄的流水號為當(dāng)前日期下所有記錄中流水號最大那條加1得來。
一、數(shù)據(jù)庫中添加一個表:TestNo
列名 數(shù)據(jù)類型 說明
ID uniqueidentifier主鍵
No bigint 流水號字段,不過是純數(shù)字型的流水號,這個為本例子的第一種情況,流水號可以為純數(shù)字
DT datetime新增一條記錄的當(dāng)前時間,相信每新增一條記錄都會記錄這次操作的當(dāng)前時間的。
CharNo varchar(50) 流水號字段,不過是可以有字符的流水號,這個為本例子的第二種情況。
二、SQL代碼
------ --自動流水號為純數(shù)字的情況,如 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()) end else 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()) end else 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()) end select * from TestNo --------------------------------------------------------------------------------------------
總結(jié)
以上是生活随笔為你收集整理的通过SQL自动添加流水号的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 三维重建:Kinect几何映射-SDK景
- 下一篇: BD、人脸识别、KATA、Gray码--