在多用户Web环境中生成顺序发票编号

时间:2017-11-09 08:34:42

标签: c# asp.net sql-server entity-framework

我尝试使用网络表单创建和打印发票。我正在努力找到我应该使用的最佳推荐做法。 到目前为止,我的做法是;

  1. 创建一个存储“下一个发票编号”的表格,然后使用存储过程生成下一个编号,例如“下一个编号”+ 1。

  2. 将之前的号码存储在发票数据库表格中,然后在我的c#代码中将其递增1。

  3. 我想避免的是使用SQL Server身份(自动增量)来生成发票号,因为可能发生的差距(我已经看到在现实生活中发生)但是也有一些文章提到了这些差距。 Why are there gaps in my IDENTITY column values? Identity increment is jumping in SQL Server database

    我的问题是,为了确保每张发票都能获得连续的唯一发票编号,我应该遵循什么建议做法?

1 个答案:

答案 0 :(得分:1)

我建议接近“a)”。

它有两种变体:

  1. 使用SEQUENCE。确保指定了NO CACHE选项。
  2. 如您所述,创建一个“计数器”表,该表将存储要分配的下一个ID。
  3. 它的代码看起来像这样:

    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现有发票,然后向其中添加一个发票,那么我强烈建议您不要使用此方法,因为它很脆弱。如果您没有为搜索查询创建覆盖索引,那么由于竞争条件可能会导致问题。