我必须为我的应用程序的客户提供一个唯一的号码。这是发票编号,因此必须唯一,并且线程安全。
过去,我创建了一个单例并使用了lock语句:在锁定期间,我将进入数据库并获取一个新的数字,然后释放该锁定。
某事告诉我这也可以在SqlServer中完成,但是在SqlServer中,我认为我还必须创建某种类型的锁,因为我猜想sql代码(存储过程)也可以并行执行。
因此,无论如何我必须提供锁,无论是在C#还是在Sql中进行操作,是否都能有所作为?
在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如果需要,可以使用重置生成的值。
dbcc checkident