SQL 数字列禁止间隙
SQL Numeric Column forbid Gaps
我正在我的数据库中处理发票 table。我需要一个整数列来存储发票号。此列必须禁止数字之间的差距。标识不起作用,因为回滚会产生间隙。
所以我想要的是:
InvoiceId(Primary key identity) InvoiceNumber(Unique, NOT NUll)
1 1
2 2
10 3
13 4
sql 中是否有特殊的方法来做到这一点?
sql没有解决办法,c#+entity怎么办?
编辑 1:
附加信息:永远不会删除一行。
编辑 2:
为什么我需要 gapLess Column:这是法律要求(法国法律)。发票号为gapLess,说明你没有去掉发票。
因为有多个用户,您无法在客户端重新计算值。只需在您的数据库中为 insert/delete 创建触发器,它将重新计算整个 table.
的 InvoiceNumber
如果您并行访问数据库,则无法避免出现漏洞。
简单案例:
- 过程 A) 创建发票。 (#1)
- 流程 B) 创建发票。 (#2)
- 进程 A) 回滚它的事务。
- 差距。
您可以为整个交易锁定整个 table。这意味着只有一个流程可以同时创建发票。对于一个人手工创建所有发票的小公司来说,这可能是可以接受的。
或者您可以将该栏留空,每晚一次锁定整个 table 并写下那些尚未设置的数字。这意味着您稍后会在发票处理过程中获得发票编号,但不会出现空白。
或者您可以再次阅读要求。德国有一些同样愚蠢的东西,但它只是为了让税务部门的表格上有这些数字。因此,您可以使用带有间隙的普通发票编号,当将它们发送到这个官僚主义的怪物时,您将仅在出口时生成一个唯一的、无间隙的编号。
我正在我的数据库中处理发票 table。我需要一个整数列来存储发票号。此列必须禁止数字之间的差距。标识不起作用,因为回滚会产生间隙。
所以我想要的是:
InvoiceId(Primary key identity) InvoiceNumber(Unique, NOT NUll)
1 1
2 2
10 3
13 4
sql 中是否有特殊的方法来做到这一点? sql没有解决办法,c#+entity怎么办?
编辑 1: 附加信息:永远不会删除一行。
编辑 2: 为什么我需要 gapLess Column:这是法律要求(法国法律)。发票号为gapLess,说明你没有去掉发票。
因为有多个用户,您无法在客户端重新计算值。只需在您的数据库中为 insert/delete 创建触发器,它将重新计算整个 table.
的 InvoiceNumber如果您并行访问数据库,则无法避免出现漏洞。
简单案例:
- 过程 A) 创建发票。 (#1)
- 流程 B) 创建发票。 (#2)
- 进程 A) 回滚它的事务。
- 差距。
您可以为整个交易锁定整个 table。这意味着只有一个流程可以同时创建发票。对于一个人手工创建所有发票的小公司来说,这可能是可以接受的。
或者您可以将该栏留空,每晚一次锁定整个 table 并写下那些尚未设置的数字。这意味着您稍后会在发票处理过程中获得发票编号,但不会出现空白。
或者您可以再次阅读要求。德国有一些同样愚蠢的东西,但它只是为了让税务部门的表格上有这些数字。因此,您可以使用带有间隙的普通发票编号,当将它们发送到这个官僚主义的怪物时,您将仅在出口时生成一个唯一的、无间隙的编号。