業務單號自動成長的處理辦法

來源:互聯網
上載者:User

問題:在實際業務處理中有些單號需要自動成長,但又不能用自增列代替
      eg:  P031106001   -- 第一位P表示採購單,031106表示日期,後三位是流水號。 

/* 1:建立測試用的表結構 */
create table tablename(pono char(10),b int)
go
/* 2:建立一個得到當前日期的視圖,為下面的自字義函數作準備 */
create view vGetdate
as
  select getdate() as today
go
/* 3:用自訂函數來得到單號(因自定函數內不能用getdate()來得到當前日期,要用到上面的視圖) */
create function getDH()
returns char(10)
As
begin
    declare @dh1 char(10),@dh2 char(10)
    select @dh1 = max(pono) from  tableName
    Set @dh1 = IsNull(@dh1,'P000000000') 
    select @dh2 = Left(@dh1,1) + right(convert(varchar(8),today,112),6) + '001' from vGetdate
    if @dh1 >= @dh2
    begin
        set @dh2 = left(@dh1,7) + right('000'+ cast(cast(right(@dh1,3) as int)+1 as varchar),3)
    end   
    return(@dh2)
end
go
/* 4:在欄位預設值中填入 dbo.getdh() */
alter table tablename add constraint df_tablename_1 default(dbo.getdh()) for pono
-/* 5:測試:*/
insert tablename(b) values(1)
insert tablename(b) values(2)
Select * from tablename
-- 測試結果
pono       b          
---------- -----------
P031115001 1
P031115002 2
總結:此方法運用到了一些小技巧
1:用欄位預設值來實現單號自增
2:用自訂函數來得到欄位的預設值
3:因在自訂函數中不能用getdate()之類非確定的函數,用視圖來得到當前日期

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.