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