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

问题描述 投票:0回答:3

所以我正在制作一个票务管理系统,当顾客到来时,他/她将被分配一个票号。 我想保持简单,并希望生成一个 4 或 5 位数的票号,例如:

00001
00002
00003

这将每天重置,即今天可能为客户分配票证 00005,明天可以为另一位客户分配该号码(因为票证每天都会过期) 一种方法是在某个表中记录最后一个数字的计数,然后在其中添加一个以生成下一个数字。但是如果两个或更多人同时来,这可能会导致一些并发问题!?
所以我在想是否可以使用 SQL Server 标识列来实现此目的,因为它将负责生成序列号。问题是它不会在第二天重置,并且会继续增加,所以最终它会变成一个非常大的数字。

最好的方法是什么?

c# sql-server-2012 ticket-system
3个回答
1
投票

我想到的最合适的 SQL Server 功能是序列

可以使用 ALTER SEQUENCE (Transact-SQL) 重置。


0
投票

您可以在数据库表中创建 2 列,

DataTime
UnixTime
,那么
unixtime
是增量的。

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

每次请求获取票号后,您可以生成所有票号


0
投票

创建一个包含单个整数列的表,并在票证创建存储过程中将该列的增量包装在事务中。当您想要重置计数时,将整数值重置为 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
© www.soinside.com 2019 - 2024. All rights reserved.