所以我正在制作一个票务管理系统,当顾客到来时,他/她将被分配一个票号。 我想保持简单,并希望生成一个 4 或 5 位数的票号,例如:
00001
00002
00003
这将每天重置,即今天可能为客户分配票证 00005,明天可以为另一位客户分配该号码(因为票证每天都会过期)
一种方法是在某个表中记录最后一个数字的计数,然后在其中添加一个以生成下一个数字。但是如果两个或更多人同时来,这可能会导致一些并发问题!?
所以我在想是否可以使用 SQL Server 标识列来实现此目的,因为它将负责生成序列号。问题是它不会在第二天重置,并且会继续增加,所以最终它会变成一个非常大的数字。
最好的方法是什么?
我想到的最合适的 SQL Server 功能是序列。
可以使用 ALTER SEQUENCE (Transact-SQL) 重置。
您可以在数据库表中创建 2 列,
DataTime
和 UnixTime
,那么 unixtime
是增量的。
然后创建一个存储过程来为当天的所有记录设置每天的票数。
每次请求获取票号后,您可以生成所有票号
创建一个包含单个整数列的表,并在票证创建存储过程中将该列的增量包装在事务中。当您想要重置计数时,将整数值重置为 0。如下:
-- table to hold 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