close

簡單描述一下.在Insert/Update時使用Trigger.
中使用PROCEDURE.即可完成自動編碼.
功能流程就像SUMMER說的一樣.


提共簡單的編碼方式.這只是Idea而已.要管控及強大.
自行想想羅.但已滿足功能的需求~


sample1:

代碼:
CREATE PROCEDURE [test2]
@table  varchar(20),
@field  varchar(20)
AS
declare @len1   int
declare @sno    varchar(10)
declare @YYYYMM varchar(6)
declare @strSql varchar(100)
  --取得年月
  IF len(DatePart(month, getDate())) <2
    set @YYYYMM=cast(DatePart(year, getDate()) as varchar) + '0' + cast(DatePart(month, getDate()) as varchar)
  Else
    set @YYYYMM=cast(DatePart(year, getDate()) as varchar) + cast(DatePart(month, getDate()) as varchar)
 
  --取得編號
  set @strSql='select  max('+ @field +')  from '+ @table +' where substring('+ @field +' ,1,6)='+ @YYYYMM
  --set @sno= (select  max( @field )  from  @table  where substring( @field  ,1,6)= @YYYYMM)
  print @strSql
  exec (@strSql)
 print @sno

GO



sample2:

代碼:
/*自動編號
   
*/
CREATE PROCEDURE usp_自動編號1    @sno  char(10) output
AS declare @YYYYMM char(6),
                 @ano char(10)                 
/*  取得年月   */
if datepart(month,getdate())<10
   select @YYYYMM=str(datepart(year,getdate()),4)+'0'+str(datepart(month,getdate()),1)
else
   begin
   select @YYYYMM=str(datepart(year,getdate()),4)+str(datepart(month,getdate()),2)
   end
/* 取得資料表之編號  */
select @ano=(select max(報價單號)  from 客戶報價單檔 where substring(報價單號,1,6)=@YYYYMM)
/* 給定編號*/
if @ano  is null
  begin
    select @sno=rtrim(@YYYYMM)+'0001'
    /*print @sno*/
  end
else
  begin
    select @sno=str(convert(int,max(@ano))+1)
    /*print @sno*/
  end

GO
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 hsiung03 的頭像
    hsiung03

    hsiung.博格 ERP軟體

    hsiung03 發表在 痞客邦 留言(0) 人氣()