我有一个位置表,看起来像这样:
CREATE TABLE Locations (
Id INT NOT NULL AUTO_INCREMENT,
Name VARCHAR(255) NOT NULL,
NextInvoice INT NOT NULL,
PRIMARY KEY (Id)
);
现在我想为一个位置创建一张发票,我需要一个发票号。
发票编号将等于NextInvoice
该位置的值。然后我必须为下一张发票增加这个值。
非常简单的逻辑,但由于并发和竞争条件而变得复杂。
我如何执行检索某个位置的下一个可用发票编号然后递增该值的任务,并且在同时多次调用该代码时不重复或跳过任何数字?
我不能使用自动递增的唯一约束数,因为数字可以跨位置重复。
注意:我的核心技能包括 C#,不一定是 SQL-Server。事实上,我正在为此使用实体框架。但如果需要,我不会写一个存储过程。