我尝试使用网络表单创建和打印发票。我正在努力找到我应该使用的最佳推荐做法。 到目前为止,我的做法是;
创建一个存储“下一个发票编号”的表格,然后使用存储过程生成下一个编号,例如“下一个编号”+ 1。
将之前的号码存储在发票数据库表格中,然后在我的c#代码中将其递增1。
我想避免的是使用SQL Server身份(自动增量)来生成发票号,因为可能发生的差距(我已经看到在现实生活中发生)但是也有一些文章提到了这些差距。 Why are there gaps in my IDENTITY column values? Identity increment is jumping in SQL Server database
我的问题是,为了确保每张发票都能获得连续的唯一发票编号,我应该遵循什么建议做法?
答案 0 :(得分:1)
我建议接近“a)”。
它有两种变体:
SEQUENCE
。确保指定了NO CACHE
选项。它的代码看起来像这样:
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
现有发票,然后向其中添加一个发票,那么我强烈建议您不要使用此方法,因为它很脆弱。如果您没有为搜索查询创建覆盖索引,那么由于竞争条件可能会导致问题。