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