【发布时间】:2017-11-09 08:34:42
【问题描述】:
我尝试使用网络表单创建和打印发票。我正在尝试找到我应该使用的最佳推荐做法。 到目前为止,我的做法是;
创建一个存储“下一个发票编号”的表,然后使用存储过程生成下一个编号,例如“下一个编号”+1。
将之前的数字存储在发票数据库表中,然后在我的 c# 代码中将其加一。
我想避免的是使用 SQL Server 标识(自动增量)来生成发票编号,因为可能会发生差距(我在现实生活中看到会发生),但也有文章提到这些差距。 Why are there gaps in my IDENTITY column values? Identity increment is jumping in SQL Server database
我的问题是我应该遵循什么建议做法来确保每张发票都会获得顺序唯一的发票编号?
【问题讨论】:
-
只是为了清除任何XY Problem 问题,您想通过使用顺序发票编号来实现什么?实际上,我会说使用顺序发票编号本身并不是一个好习惯。如果这些数字显示在外部,那么您的任何客户都可以知道您生产了多少张发票。或者,也许您实际上想要每个客户的序列号?
-
方法“a)”有什么问题?你遇到过问题吗?方法“a)”的“现代”实现将使用
SEQUENCE,但我不会费心重写现有代码。 -
Pac0,存在要求系统生成连续发票编号的法律问题。另外,我不是在要求代码...我在询问推荐的方法。我也相信实践 a) 更好
-
如果您并行创建发票(我假设是这种情况),则无法 100% 可靠地防止出现空白。您当然可以在插入发票时锁定整个表格,但我认为这对您来说不是一个好的解决方案(另一方面,如果您的负载很小并且不经常创建发票 - 为什么不)。如果“无间隙”要求不是非常严格的要求(如您所在国家/地区的某些法律),那就别管它了。
-
@Alex 我并没有质疑他对他的实际问题进行研究的事实。他做到了,这个问题很好。我只是想确保他试图解决的潜在问题实际上需要使用序列号。 OP已经澄清了(法律要求),所以这绝对不是XY问题。
标签: c# asp.net sql-server entity-framework