根據日期 順序號生成流水號的儲存過程

2021-04-15 01:17:43 字數 1755 閱讀 7733

前幾天做乙個專案,要求能按日期+順序號生成流水號,檢視網上相關方法發現都差不多,但是沒有完整的編碼,被逼無賴,自己做乙個,頂一頂也用起來了.

本儲存過程在sql server 2000下測試通過:

create procedure [dbo].[createpcdid]

(@pcdid char(20)  output--輸出派車單號)as

declare @result int --當天派車記錄

declare @firstresult int--第一次執行

declare @maxpcdid char(11)--當日最大的派車單號

declare  @num int--當日流水號

set  @maxpcdid=(select top 1 pcdid from pcd  where convert(char(10),pcdate,101)=convert(char(10),getdate(),101) order by pcdid desc)

set @firstresult=(select count(*) from pcd)--第一次執行系統,無記錄時使用

set @result=(select count(*) from pcd where convert(char(10),pcdate,101)=convert(char(10),getdate(),101))--查詢當天記錄

set  @num=cast(right(@maxpcdid,3) as int)+1--流水號自動增加1

--變數宣告部分,如下是程式主體--

if @result>0--當天已經有派車記錄

set @pcdid=convert(varchar(100),getdate(),112)+replace(str(@num,3),' ','0')

if  @result=0 --當天沒有記錄或沒有記錄

set  @pcdid=convert(varchar(100),getdate(),112)+'001'

if  @firstresult=0

set @pcdid=convert(varchar(100),getdate(),112)+'001'

go如下是建表的**

create table [dbo].[pcd] (

[id] [int] identity (1, 1) not null ,

[pcdid] [char] (20) collate chinese_prc_ci_as not null ,

[itemno] [char] (10) collate chinese_prc_ci_as not null ,

[orderid] [int] not null ,

[csno] [char] (20) collate chinese_prc_ci_as not null ,

[team] [nvarchar] (10) collate chinese_prc_ci_as not null ,

[pcdate] [**alldatetime] not null ,

[marks] [nvarchar] (100) collate chinese_prc_ci_as null ,

[other**arks] [nvarchar] (100) collate chinese_prc_ci_as null

) on [primary]

測試通過,不過暫時允許一天有999個順序號,如果到了1000個,會生成乙個錯誤的流水號,這個倒是要注意,不過對於我的應用來說1000個流水號一天是完全充分夠用的,也就沒有注意進一步的改進.

儲存過程生成流水號

格式如a20110915001,第1位寫死a,2 5位為年,6 7位為月,8 9位為日,最後三位為流水號.declare newvalue varchar 12 declare newcode varchar 3 declare oldcode varchar 3 declare oldyearmo...

SQL生成 日期 流水號 的編號

以下 生成的編號長度為12,前6位為日期資訊,格式為yymmdd,後6位為流水號。建立得到當前日期的檢視 create view v getdate asselect dt convert char 6 getdate 12 go 得到新編號的函式 create function f nextbh ...

流水號工單號生成 儲存過程

1.生成格式 工單型別 日期 四位流水號 例如 1101 20100517 1104 儲存過程 create procedure dbo cs spcreateformkey asdeclare currentmaxid char 4 id char 4 begin set nocount on s...