我必须为我的应用程序的客户提供一个唯一的号码.这是一个发票号码,所以它必须是唯一的,并且线程安全.
在过去,我创建了一个单例并使用了一个锁定语句:在锁定期间,我将转到数据库并获取一个新数字,然后释放锁定.
有些东西告诉我这也可以在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()
Run Code Online (Sandbox Code Playgroud)
这比获取桌子上的锁更快,更轻巧.请看这里的脏细节.
如果您担心该表填满了数千行,请不要担心,您可以定期从表中删除所有行,SQL Server仍会记住要生成的下一个值.dbcc checkident如果需要,您可以重置生成的值.
| 归档时间: |
|
| 查看次数: |
186 次 |
| 最近记录: |