生成每日重置的票号的最佳方法

问题描述

所以我正在制作一个票务管理系统,客户会来,他/她会被分配一个票号。 我想保持简单,并希望生成一个 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列,DataTimeUnixTime,那么unixtime是增量的。

然后创建一个存储过程来为一天的所有记录设置每天的票数。

根据请求获取票号后,您​​可以生成所有票号

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...