sql 獲取最大的流水號

2021-07-07 09:29:28 字數 2618 閱讀 5094

--exec [zkmc_public_getquoreceivedocsn] 'sp'

--建立人:lj  

--標籤拆分的sn   

alter  proc  [dbo].[zkmc_public_getquoreceivedocsn]        

(@headstr nvarchar(10))        

as begin     

declare @date  datetime 

set @date  = getdate()  

declare  @oid2 nvarchar(50)    

declare  @oid nvarchar(50)    

declare @month nvarchar(2)    

declare @year nvarchar(4)    

declare @ym nvarchar(6)    

declare @length  int     

set @month=month(@date)    

if len(@month)=1    

set @month='0'+@month --使月為兩位長    

declare @day  nvarchar(2)

set @day = day(@date)

if len(@day) =1 

set @day = '0' + @day --日

set @year=right(convert(nvarchar,year(@date)),2)    

set @ym=@year+@month +@day --組成年月字元   

print @ym  

set @length =len(@headstr)     

--格式q200908001    

if exists(select * from t_receivedoct where  sn like '%' +  @headstr+ @ym +'%'  )    

begin    

declare  @strsql  nvarchar(max)    

set @strsql=' select  top 1 @oid3=sn from t_receivedoct     

where  sn like ''' + @headstr+ @ym +'%''   order by id desc '    

print @strsql

exec sp_executesql @strsql,n'@oid3 nvarchar(50) output',@oid2 output   

print @oid2   

--獲取最後一條的單據編號,一定要有id,並且自動生成的,倒排序    

end    

else     

begin    

set @oid2=@headstr+@ym+'000' --沒有記錄是預設為今天    

end    

print  'oid:  '+ @oid2    

--訂單不是本月的,重新開始乙個新的訂單流水號    

if convert(nvarchar,substring(@oid2,5,2)) <>@month    

begin    

--用本月的年月號開始    

set @oid2=@headstr+@ym+'000'    

print @oid2 

end    

declare @str nvarchar(50) --臨時單號    

set @str=convert(nvarchar,(convert(int,substring(@oid2,9,3))+1)) --訂單號加一    

print 'dfds' + @str

while (3-len(@str)>0)    

begin    

set @str='0'+@str        

end   

set @oid2=@headstr+@ym+@str    

--print '---'+@oid2    

--如果該訂單好已經存在,則重新獲取    

while exists(select * from t_receivedoct where sn=@oid2)      

begin    

set @str=convert(nvarchar,(convert(int,substring(@oid2,9,3))+1)) --訂單號加一    

while (3-len(@str)>0)    

begin    

set @str='0'+@str        

end    

set @oid2=@headstr+@ym+@str    

--     print @oid2    

end    

set @oid=convert(nvarchar,@oid2)    

--print 'q'+convert(nvarchar,year(getdate()))+convert(nvarchar,month(getdate()))+@str    

select @oid    

end 

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的值為前面兩位英文,後面四位數字,例...

SQL系列流水號

實現效果 流水號由三部分組成,流水號頭部 日期 產生的序號 流水號序號產生按照每天乙個週期來算,即每天序號都由0開始 設計原理 我用乙個專門的表記錄流水號的相關資訊,例如流水號頭,流水號名稱,當前流水號的序號等等,如下 編號表對應的實體表 如果tb bh儲存的日期和當前日期相同,則從tb bh的xu...