我尝试使用 Web 表单创建和打印发票。我正在尝试找到我应该使用的最佳推荐做法。 到目前为止,我的做法是;
创建一个表来存储“下一个发票编号”,然后使用存储过程生成下一个编号,例如“下一个编号”+ 1。
将之前的数字存储在发票数据库表中,然后在我的 C# 代码中将其递增 1。
我想避免的是使用 SQL Server 身份(自动递增)来生成发票号,因为可能会出现差距(我在现实生活中看到过),但也有文章提到这些差距。 Why are there gaps in my IDENTITY column values? Identity increment is jumping in SQL Server database
我的问题是我应该遵循什么推荐做法来确保每张发票都获得连续的唯一发票编号?
最佳答案
我会推荐方法“a)”。
它有两种变体:
- 使用
SEQUENCE
.确保指定了NO CACHE
选项。 - 如您所述,创建一个“计数器”表,用于存储下一个要分配的 ID。
它的代码看起来像这样:
CREATE TABLE Counter( NextID INT NOT NULL DEFAULT(1))
INSERT INTO Counter VALUES( DEFAULT )
DECLARE @NextID INT
UPDATE Counter
SET @NextID = NextID,
NextID = NextID + 1
SELECT @NextID
注意:我不完全理解您对选项“b)”的描述。假设您的意思是:您想要搜索当前发票表以查找 MAX
现有发票,然后向其中添加一个,那么我强烈建议不要使用这种方法,因为它很脆弱。如果您没有为搜索查询创建覆盖索引,那么您可能会因竞争条件而出现问题。
关于c# - 在多用户 Web 环境中生成顺序发票编号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47197258/