-- =============================================
-- Create author:xcz
-- Create date: <2020-12-24>
-- Description: <自動生成流水碼,前綴+日期+流水碼,如PG-20210320-0001>
-- =============================================
ALTER proc [dbo].[CreateSerial]
(@tbname nvarchar(10), --需要生成編號的表名
@rq datetime, --日期列的值,生成編號的第二部分
@returnValue nvarchar(50) output)
as
declare @pre nvarchar(10) --流水號前綴
declare @mid nvarchar(10) --流水號日期格式
declare @sufwide int --流水號后綴長度
declare @i int --回圈使用
declare @suffix nvarchar(10) --流水號后綴
declare @date nvarchar(10) --日期格式
declare @maxNo nvarchar(50) --當前最大流水號
--通過ID獲取對應的流水號格式
begin
select @pre=Pre,@mid=DateRule,@sufwide=SufWide
from serial_rul --存放編號規則的表
where @tbname=TbName
--根據年月日的格式資訊轉出當天日期資訊
if @mid = 'yyyyMMdd'
begin
select @date=Convert(varChar(10),@rq,112)
end
if @mid='yyMMdd'
begin
select @date=right (Convert(varChar(10),@rq,112),6)
end
--獲取當前表內的最大的流水號
declare @tems1 nvarchar(max),@tems2 nvarchar(max),@tems3 nvarchar(max)
set @tems1='select ';
set @tems2='=max(編號) from ';
set @tems3=' where 編號 like ';
Exec(@tems1+ @maxNo + @tems2 + @tbname + @tems3 + @pre+'-'+@date+'%')
--當天還未產生編號則1開始編號
if (ISNULL(@maxNo,''))=''
begin
select @suffix=convert (varchar(10),convert(int,1))
set @i=1
while @i<@sufwide
begin
set @suffix='0'+@suffix
set @i=@i+1
end
set @returnValue=https://bbs.csdn.net/topics/ @pre+'-'+@date+'-'+@suffix
end
else
--單日已有編號則最大編號后綴的字串+1
begin
set @suffix=convert (varchar(10),convert(int,right(@maxNo,@sufwide))+1)
set @i=@sufwide-len(@suffix)
while @i<@sufwide
begin
set @suffix='0'+@suffix
set @i=@i+1
end
set @returnValue=https://bbs.csdn.net/topics/ @pre+'-'+@date+'-'+@suffix
end
end
uj5u.com熱心網友回復:
Exec(@tems1+ @maxNo + @tems2 + @tbname + @tems3 + @pre+'-'+@date+'%'),這里的@maxNo作為輸出變數要回傳的轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/269958.html
標籤:疑難問題
下一篇:小白問一個mysql的演算法實作
