我正在使用SQL Server(版本2008和2012)进行销售项目。我需要将销售数据插入表中并为该数据创建发票编号。为此,我将invoiceNumber
列设置为一个标识列,该列递增1。
但是现在,我们有一个要求,我们的发票号之间不应有空格(除非发票被删除。删除的发票将存储在单独的表中)。
“身份”列将在交易失败时丢失发票编号。从SQL Server 2012开始,服务器重新启动时,它可能增加1000。为了摆脱这个问题,我被迫使用如下所示的INSERT SELECT
语句
INSERT INTO SalesTable(InvoiceNumber, col1, col2)
VALUES ((SELECT MAX(SalesId) FROM SalesTable + 1), value1, value2)
如果我的软件可以在单台计算机上运行,这可能会正常工作。
我的问题是,如果我在多个用户同时创建销售发票的软件中使用此代码,那么两个发票是否有可能获得相同的发票编号?我是说发票号码重复吗?
在插入数据之前使用表上的锁是否可以防止此问题?如果是,该怎么办?与使用锁相关的问题是什么?
我找到了类似的问题,但没有找到最佳解决方案。
在此方面的任何帮助将不胜感激。谢谢。