sql server 按照日期自动生成单据编号的函数

sql server 按照日期自动生成单据编号的函数,格式为##08080001,##表示打头的单据字符,然后是年月和流水编号。
传入的参数为单据的打头字符和生成单据的日期
一般的调用格式为dbo.GetCostBillID('HP',getdate())

sql server 按照日期自动生成单据编号的函数 -- 按单号和年月获取单据的编号
sql server 按照日期自动生成单据编号的函数
CREATE   FUNCTION  GetCostBillID( @headStr   nvarchar ( 10 ), @date   datetime )
sql server 按照日期自动生成单据编号的函数
RETURNS   nvarchar ( 50 )
sql server 按照日期自动生成单据编号的函数
BEGIN  
sql server 按照日期自动生成单据编号的函数
declare    @oid2   nvarchar ( 50 )
sql server 按照日期自动生成单据编号的函数
declare   @oid   nvarchar ( 50 )
sql server 按照日期自动生成单据编号的函数
declare   @month   nvarchar ( 2 )
sql server 按照日期自动生成单据编号的函数
declare   @year   nvarchar ( 2 )
sql server 按照日期自动生成单据编号的函数
declare   @ym   nvarchar ( 4 )
sql server 按照日期自动生成单据编号的函数
set   @month = month ( @date )
sql server 按照日期自动生成单据编号的函数
if   len ( @month ) = 1
sql server 按照日期自动生成单据编号的函数    
set   @month = ' 0 ' + @month   -- 使月为两位长
sql server 按照日期自动生成单据编号的函数
set   @year =right ( convert ( nvarchar , year ( @date )), 2 )
sql server 按照日期自动生成单据编号的函数
set   @ym = @year + @month   -- 组成年月字符
sql server 按照日期自动生成单据编号的函数

sql server 按照日期自动生成单据编号的函数
-- 格式CB0808001
sql server 按照日期自动生成单据编号的函数
if   exists ( select   *   from  CostBill)
sql server 按照日期自动生成单据编号的函数
begin
sql server 按照日期自动生成单据编号的函数    
select    top   1   @oid2 = CostBillID  from  CostBill  order   by  id  desc   -- 获取最后一条的单据编号,一定要有id,并且自动生成的,倒排序
sql server 按照日期自动生成单据编号的函数
end
sql server 按照日期自动生成单据编号的函数
else  
sql server 按照日期自动生成单据编号的函数
begin
sql server 按照日期自动生成单据编号的函数    
set   @oid2 = @headStr + @ym + ' 0000 '   -- 没有记录是默认为今天
sql server 按照日期自动生成单据编号的函数
end
sql server 按照日期自动生成单据编号的函数
sql server 按照日期自动生成单据编号的函数
-- 订单不是本月的,重新开始一个新的订单流水号
sql server 按照日期自动生成单据编号的函数
if   convert ( nvarchar , left ( @oid2 , 6 )) <> @headStr + @ym
sql server 按照日期自动生成单据编号的函数
begin
sql server 按照日期自动生成单据编号的函数
-- 用本月的年月号开始
sql server 按照日期自动生成单据编号的函数
     set   @oid2 = @headStr + @ym + ' 0000 '
sql server 按照日期自动生成单据编号的函数
end
sql server 按照日期自动生成单据编号的函数
sql server 按照日期自动生成单据编号的函数
declare   @str   nvarchar ( 50 -- 临时单号
sql server 按照日期自动生成单据编号的函数

sql server 按照日期自动生成单据编号的函数
set   @str = convert ( nvarchar ,( convert ( int , right ( @oid2 , 4 )) + 1 ))  -- 订单号加一
sql server 按照日期自动生成单据编号的函数
while  ( 4 - len ( @str ) > 0 )
sql server 按照日期自动生成单据编号的函数
begin
sql server 按照日期自动生成单据编号的函数     
set   @str = ' 0 ' + @str     
sql server 按照日期自动生成单据编号的函数
end
sql server 按照日期自动生成单据编号的函数
set   @oid2 = @headStr + @ym + @str
sql server 按照日期自动生成单据编号的函数
-- print @oid2
sql server 按照日期自动生成单据编号的函数

sql server 按照日期自动生成单据编号的函数
-- 如果该订单好已经存在,则重新获取
sql server 按照日期自动生成单据编号的函数
while   exists ( select   *   from  CostBill  where  CostBillID = @oid2 )
sql server 按照日期自动生成单据编号的函数
begin
sql server 按照日期自动生成单据编号的函数    
sql server 按照日期自动生成单据编号的函数    
set   @str = convert ( nvarchar ,( convert ( int , right ( @oid2 , 4 )) + 1 ))  -- 订单号加一
sql server 按照日期自动生成单据编号的函数
     while  ( 4 - len ( @str ) > 0 )
sql server 按照日期自动生成单据编号的函数    
begin
sql server 按照日期自动生成单据编号的函数         
set   @str = ' 0 ' + @str     
sql server 按照日期自动生成单据编号的函数    
end
sql server 按照日期自动生成单据编号的函数    
set   @oid2 = @headStr + @ym + @str
sql server 按照日期自动生成单据编号的函数
--     print @oid2
sql server 按照日期自动生成单据编号的函数
end
sql server 按照日期自动生成单据编号的函数
sql server 按照日期自动生成单据编号的函数
set   @oid = convert ( nvarchar , @oid2 )
sql server 按照日期自动生成单据编号的函数
-- print 'HP'+convert(nvarchar,year(getdate()))+convert(nvarchar,month(getdate()))+@str
sql server 按照日期自动生成单据编号的函数

sql server 按照日期自动生成单据编号的函数
RETURN   @oid
sql server 按照日期自动生成单据编号的函数
END
sql server 按照日期自动生成单据编号的函数
sql server 按照日期自动生成单据编号的函数

你可能感兴趣的:(SQL Server)