问题描述
所以我正在制作一个票务管理系统,客户会来,他/她会被分配一个票号。 我想保持简单,并希望生成一个 4 位或 5 位数字的票号,例如:
00001
00002
00003
这将每天重置,即今天可能会为客户分配票号 00005,明天可以为另一位客户分配该号码(因为票证每天都会过期)
一种方法是在某个表中保持计数,从那里我读取最后一个数字,然后在其中添加一个以生成下一个数字。但是如果两个或更多人同时来,这会导致一些并发问题!?
所以我在想是否可以为此目的使用 sql Server 标识列,因为它会负责生成序列号。问题是它不会在第二天重置并且会继续增加,所以最终它会变成一个非常大的数字。
最好的方法是什么?
解决方法
我想到的最合适的 SQL Server 功能是 Sequence。
可以用ALTER SEQUENCE (Transact-SQL)重置。
,创建一个具有单个整数列的表,并在您的票据创建存储过程中将该列的增量包装在一个事务中。当您想要重置计数时,将整数值重置为 0。如下图:
-- table to hole the next ticket number
CREATE TABLE [dbo].[ticketNumber](
[nextTicket] [int] NOT NULL
) ON [PRIMARY]
INSERT INTO [dbo].[ticketNumber] VALUES (0)
然后一个存储过程来使用包裹在事务中的表:
begin tran
declare @nextTicket int
update ticketNumber set @nextTicket=nextTicket=nextTicket+1
--do you other sql here
commit
,
可以在数据库表中创建2列,DataTime
和UnixTime
,那么unixtime
是增量的。
然后创建一个存储过程来为一天的所有记录设置每天的票数。
根据请求获取票号后,您可以生成所有票号