【发布时间】:2014-12-30 13:40:28
【问题描述】:
这是一个理论场景,
假设我有一个客户表和一个发票表。 1 个客户可以有多张发票。
现在我希望每张发票都有一个对该客户唯一的发票编号
即
ClientId InvoiceNo
1 IN0001
2 IN0001
2 IN0002
2 IN0003
3 IN0001
目前我在我的应用程序中通过查看最大值等来控制它,但这显然不是一个很好的解决方案。我宁愿让我的数据库为我做这件事,因为它应该消除为单个客户创建重复发票号码的风险(竞争条件?)
我一直在阅读 Sql Server 2012 的 SEQUENCE,这听起来不错,但问题是我仍然需要每个客户端一个单独的序列
即
CREATE SEQUENCE InvoiceNum_Client1.....
CREATE SEQUENCE InvoiceNum_Client2.....
CREATE SEQUENCE InvoiceNum_Client3.....
但是每次创建新客户端时,从我的应用程序中进行数据库元更改会让人感觉很脏。然后我的触发器将不得不做这样的事情(我什至不会开始知道该怎么做)
NEXT VALUE FOR InvoiceNum_Client + @ClientId
等
所以我的下一个想法是有一个“序列”表,即
ClientID INSequenceNumber
1 1
2 3
3 3
在我的触发器中,获取给定客户端的 InSequenceNumber,使用它来生成我的 invoiceNumber,然后更新序列表,将同一客户端的 InSequenceNumber 递增 1。它应该具有相同的效果,但我只是不确定事务和范围等的内部工作原理
所以我的问题是
- 我的自卷顺序方法有什么大的缺点吗?
- 还有其他我可能忽略的解决方案吗?
谢谢!
【问题讨论】:
标签: sql sql-server sql-server-2012