1,首先在数据库中创建一个存放流水号的表
CREATE TABLE [dbo].[NumSeq] (
[Cate] [varchar] (2) NULL ,
[DateNo] [varchar] (8) NOT NULL ,
[Seq] [int] NULL ,
[CrTime] [datetime] NOT NULL
)
上面的代码中,Cate 字段为流水号的头,可以在下面的存储过程中用参数的方式传入,我的定义是2个字符,这个可以根据具体需要更改
DateNo 字段为获取日期信息
Seq 字段为流水号,但最终生成的流水号是这三个字段的相加
2,创建存储过程
ALTER PROC dpPMT_SGetMaintainSeq
@MaintainCate VARCHAR(2) ,
@MaintainNo VARCHAR(14) output
AS
--***********************累加编號*************************************************
IF NOT EXISTS(SELECT
*
FROM
NumSeq
WHERE
Cate=@MaintainCate AND DATEDIFF(DAY,CrTime,GETDATE())=0)
BEGIN
INSERT INTO
NumSeq(Cate,DateNo,Seq,CrTime)
values(@MaintainCate,CONVERT(VARCHAR(4),YEAR(GETDATE()))+REPLICATE('0',2-LEN(MONTH(GETDATE())))+CONVERT(VARCHAR(2),MONTH(GETDATE()))+REPLICATE('0',2-LEN(DAY(GETDATE())))+CONVERT(VARCHAR(2),DAY(GETDATE())),1,getdate())
END
ELSE
BEGIN
UPDATE
NumSeq
SET
Seq=Seq+1
WHERE
Cate=@MaintainCate AND DateNo=CONVERT(VARCHAR(4),YEAR(GETDATE()))+REPLICATE('0',2-LEN(MONTH(GETDATE())))+CONVERT(VARCHAR(2),MONTH(GETDATE()))+REPLICATE('0',2-LEN(DAY(GETDATE())))+CONVERT(VARCHAR(2),DAY(GETDATE()))
END
--************************组合编號***************************************************************
SELECT
@MaintainNo=Cate+DateNo+REPLICATE('0',4-LEN(Seq))+CONVERT(VARCHAR(4),Seq)
FROM
NumSeq
WHERE
Cate=@MaintainCate AND DateNo=CONVERT(VARCHAR(4),YEAR(GETDATE()))+REPLICATE('0',2-LEN(MONTH(GETDATE())))+CONVERT(VARCHAR(2),MONTH(GETDATE()))+REPLICATE('0',2-LEN(DAY(GETDATE())))+CONVERT(VARCHAR(2),DAY(GETDATE()))
SELECT @MaintainNo
这个存储过程最终输出的结果如:aa200711150000前面两位是传入的参数,中间四位是年份的后两位是月份,再後兩們是天數,最后的四位為流水号。您也可以修改上面的存储过程来生成符合您要求的流水号
ASP頁面調用:
DIM MyComm,MyRst,MyConStr,strf, UserName
strf="aa"
MyConStr="driver={SQL Server};database=procstock1;server=10.2.10.239;uid=ProcStock;pwd=ProcStock"
'**通过Connection对象调用存储过程**
Set MyComm = Server.CreateObject("ADODB.Command")
with MyComm
.ActiveConnection = MyConStr 'MyConStr是数据库连接字串
.CommandText = "dpPMT_SGetMaintainSeq" '指定存储过程名
.CommandType = 4 '表明这是一个存储过程
.Prepared = true '要求将SQL命令先行编译
.Parameters.append .CreateParameter("@MaintainCate",200,1,2,strf)
.Parameters.append .CreateParameter("@MaintainNo",200,2,12)
.Execute
end with
'取得出参
UserName = MyComm(1)
Set MyComm = Nothing
response.Write(UserName)