sql server 按照日期自動生成單據編號的函式
阿新 • • 發佈:2019-02-19
--按單號和年月獲取單據的編號
CREATEFUNCTION GetCostBillID(@headStrnvarchar(10),@datedatetime)
RETURNSnvarchar(50)
BEGIN
declare@oid2nvarchar(50)
declare@oidnvarchar(50)
declare@monthnvarchar(2)
declare@yearnvarchar(2)
declare@ymnvarchar(4)
set@month=month(@date)
iflen(@month)=1
set@month='0'+@month--使月為兩位長
set@year=right(convert
set@ym=@year+@month--組成年月字元
--格式CB0808001
ifexists(select*from CostBill)
begin
selecttop1@oid2=CostBillID from CostBill orderby id desc--獲取最後一條的單據編號,一定要有id,並且自動生成的,倒排序
end
else
begin
set@oid2=@headStr+@ym+'0000'--沒有記錄是預設為今天
end
--訂單不是本月的,重新開始一個新的訂單流水號
ifconvert(nvarchar,left(@oid2,6))
begin
--用本月的年月號開始
set@oid2=@headStr+@ym+'0000'
end
declare@strnvarchar(50) --臨時單號
set@str=convert(nvarchar,(convert(int,right(@oid2,4))+1)) --訂單號加一
while (4-len(@str)>0)
begin
set@str='0'+@str
end
set@oid2=@headStr+@ym+@str
--print @oid2
--如果該訂單好已經存在,則重新獲取
whileexists(select*from CostBill
begin
set@str=convert(nvarchar,(convert(int,right(@oid2,4))+1)) --訂單號加一
while (4-len(@str)>0)
begin
set@str='0'+@str
end
set@oid2=@headStr+@ym+@str
-- print @oid2
end
set@oid=convert(nvarchar,@oid2)
--print 'HP'+convert(nvarchar,year(getdate()))+convert(nvarchar,month(getdate()))+@str
RETURN@oid
END
/*--------------------------------------測試--------------------------------------*/
create table CostBill
(
id int Identity not null,
CostBillID VARCHAR(15) PRIMARY KEY DEFAULT dbo.GetCostBillID('HP',getdate()),
COL int
)
INSERT CostBill(col) VALUES(1)
INSERT CostBill(col) VALUES(2)
INSERT CostBill(col) VALUES(3)
INSERT CostBill(col) VALUES(4)
select * from CostBill
/*
1 HP08060001 1
2 HP08060002 1
3 HP08060002 1
4 HP08060002 1
*/