sql発生流水番号

13534 ワード

1つの発生流水番号(年月日+5ビット流水番号)の記憶過程
データベース・テーブルでプライマリ・キーであり、varcharタイプである090611+000001(年月日+5桁の流水番号)などの流水番号を生成する必要があります.当日以内にこの番号を挿入すると、この番号は増加します.すなわち、0906110000010906110000002090610000003です.当日でない場合は、090612000001から増加しなければなりません.ストレージ・プロシージャを作成しました.
create procedure test_proc  @id nvarchar(13) outputas
begin  set nocount on   declare @date nvarchar(8),          @maxdj_no numeric(13,0)  select  @date  = convert(nvarchar(20),getdate(),112) , @maxdj_no = convert(numeric(13,0),max(id)) from XT_DJNO  if substring(convert(char(20),@maxdj_No),1,6)=substring(@date,3,8)--文書番号begin select@id=convert(nvarchar(13),@maxdj_が当日生成された場合no+1)--print(@maxdj_no+1)       insert into XT_DJNO values(substring(@id,3,13),substring(convert(char(20),@maxdj_no),1,6))  --print(substring(convert(char(20),@maxdj_no),1,6))       return     end  else     begin  set @date=substring(@date,3,8)       set @id =  @date + '00001'       insert into XT_DJNO values(@id,convert(nvarchar(13),@maxdj_no))  --print(substring(@date,3,8))       return     endend
 
ORACLEでストリーム番号を生成するシーケンスを作成する:create sequence EXAMPLE_SEQ  increment by 1  start with 1  minvalue 1  cache 20;EXAMPLEテーブルにフリップフロップCREATE OR REPLACE TRIGGER"PORTAL"を作成する.TRI_EXAMPLE_TABLE BEFORE INSERT ON EXAMPLE_TABLE FOR EACH ROW  begin   select to_char(sysdate,'YYYYMMDD')||to_char(EXAMPLE_SEQ.nextval,'0000') into :new.EXAMPLE_ID from dual;  end;
 
 
まず、データベースに流水番号を格納するテーブルを作成します.
CREATETABLE[dbo].[NumSeq] (
[Cate][varchar] (2)  NOTNULL ,
[DateNo][varchar] (4)  NOTNULL ,
[Seq][int]NULL ,
[CrTime][datetime]NOTNULL
)

上のコードではCateフィールドは流水番号の頭で、次の記憶過程でパラメータで入力できます.私の定義は2文字です.これは具体的な必要に応じてDateNoフィールドを変更して日付情報Seqフィールドを流水番号にすることができますが、最終的に生成された流水番号はこの3つのフィールドの加算で記憶過程を作成します.
CREATEPROC dpPMT_SGetMaintainSeq
@MaintainCateVARCHAR(2)
AS--***********************    *************************************************DECLARE@MaintainNoVARCHAR(12)
IFNOTEXISTS(SELECT*FROM
NumSeq
WHERE
Cate=@MaintainCateANDDATEDIFF(DAY,CrTime,GETDATE())=0)
BEGININSERTINTO
NumSeq(Cate,DateNo,Seq)
values(@MaintainCate,RIGHT(CONVERT(VARCHAR(4),YEAR(GETDATE())),2)+REPLICATE('0',2-LEN(MONTH(GETDATE())))+CONVERT(VARCHAR(2),MONTH(GETDATE())),0)
ENDELSEBEGINUPDATE
NumSeq
SET
Seq=Seq+1WHERE
Cate=@MaintainCateAND DateNo=RIGHT(CONVERT(VARCHAR(4),YEAR(GETDATE())),2)+REPLICATE('0',2-LEN(MONTH(GETDATE())))+CONVERT(VARCHAR(2),MONTH(GETDATE()))
END--************************    ***************************************************************SELECT@MaintainNo=Cate+DateNo+REPLICATE('0',6-LEN(Seq))+CONVERT(VARCHAR(6),Seq)
FROM
NumSeq
WHERE
Cate=@MaintainCateAND DateNo=RIGHT(CONVERT(VARCHAR(4),YEAR(GETDATE())),2)+REPLICATE('0',2-LEN(MONTH(GETDATE())))+CONVERT(VARCHAR(2),MONTH(GETDATE()))
SELECT@MaintainNo

このストレージ・プロシージャの最終出力の結果は、AA 0710310000001の前の2つが入力パラメータであり、中間の4つが年の後の2つと月であり、最後の6つが6桁の数字の流水番号である.また、上記のストレージ・プロシージャを変更して、必要に応じたストリーム番号を生成することもできます.
転載先:https://www.cnblogs.com/Eleanore/p/sql_%e6%b5%81%e6%b0%b4%e5%8f%b7.html