什么是提供一系列唯一数字(C#vs Sql)的好方法?

Mic*_*hel 4 c# sql sql-server

我必须为我的应用程序的客户提供一个唯一的号码.这是一个发票号码,所以它必须是唯一的,并且线程安全.

在过去,我创建了一个单例并使用了一个锁定语句:在锁定期间,我将转到数据库并获取一个新数字,然后释放锁定.

有些东西告诉我这也可以在SqlServer中完成,但在SqlServer中我假设我还必须创建某种锁,因为sql代码(存储过程)也可以并行执行,我猜.

所以当我不得不提供一个锁时,它是否会在c#或Sql中有所作为?

Chr*_*ter 7

在SQL Server中使用标识列:

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

-- Generate value
insert into UniqueNumberGenerator default values
select scope_identity()
Run Code Online (Sandbox Code Playgroud)

这比获取桌子上的锁更快,更轻巧.请看这里的脏细节.

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