一尘不染

提供一系列唯一编号(C#与Sql)的好方法是什么?

sql

我必须为我的应用程序的客户提供一个唯一的号码。这是发票编号,因此必须唯一,并且线程安全。

过去,我创建了一个单例并使用了lock语句:在锁定期间,我将进入数据库并获取一个新的数字,然后释放该锁定。

某事告诉我这也可以在SqlServer中完成,但是在SqlServer中,我认为我还必须创建某种类型的锁,因为我猜想sql代码(存储过程)也可以并行执行。

因此,无论如何我必须提供锁,无论是在C#还是在Sql中进行操作,是否都能有所作为?


阅读 216

收藏
2021-05-23

共1个答案

一尘不染

在SQL Server中使用一个标识列:

-- Set up
create table UniqueNumberGenerator (UN int identity primary key)

-- Generate value
insert into UniqueNumberGenerator default values
select scope_identity()

如果您担心表填充了数千行,请不必担心,可以定期删除表中的所有行,SQL Server仍会记住要生成的下一个值。dbcc checkident如果需要,可以使用重置生成的值。

2021-05-23