由於題設的要求不全,這里假設record為單據表,id為編號欄位,最大長度20,其中流水號長度最大為5位
create proc GenerateID
@const varchar(10), --@const作為規則變數的常數
@para char(1), --@para作為規則變數的參數
@date varchar(10), --@date作為規則變數的日期
@idLen int --@idLen作為規則變數的流水號長度
@Id varchar(20) output --@輸出id作為生成的編碼
AS
if @idLen>5
begin
print('流水號長度超過5位')
return
end
declare @maxId varchar(20), @iMaxId int, @lsh varchar(5),@cIdLen char(1)
--獲取最大單號
select @maxid=right(convert(varchar(20),max(id)),5) from record
set @iMaxId=convert(int,@maxid)
set @iMaxId=@iMaxId+1
set @cIdLen=convert(char(1),@idLen)
--生成預定長度的流水號
exec('set @lsh=right(convert(varchar(5),@iMaxid),'+@cIdLen+')')
--生成編碼
set @id=@const+@para+@date+@lsh