我必须向我的应用程序的客户提供一个唯一的号码。
它是一个发票号码,因此它必须是唯一的,并且当然是线程安全的。
过去,我创建了一个单例并使用了锁定语句:在锁定期间,我会访问数据库并获取新号码,然后释放锁定。
有些东西告诉我,这也可以在 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()
这比获取表上的锁更快、更轻量。看here http://blogs.msdn.com/b/sqlprogrammability/archive/2006/04/04/567724.aspx对于肮脏的细节。
如果您担心表填满数千行,不用担心,您可以定期从表中删除所有行,SQL Server 仍然会记住下一个要生成的值。您可以使用以下命令重置生成的值dbcc checkident
如果你需要。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)