您的位置:首页 > 其它

根据日期+顺序号生成流水号的存储过程

2008-01-29 09:34 411 查看
前几天做一个项目,要求能按日期+顺序号生成流水号,查看网上相关方法发现都差不多,但是没有完整的编码,被逼无赖,自己做一个,顶一顶也用起来了.

本存储过程在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] [smalldatetime] NOT NULL ,
[Marks] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,
[OthersMarks] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]

测试通过,不过暂时允许一天有999个顺序号,如果到了1000个,会生成一个错误的流水号,这个倒是要注意,不过对于我的应用来说1000个流水号一天是完全充分够用的,也就没有注意进一步的改进.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: