Ade*_*dan 1 sql database sql-server sql-server-2008
我正在使用 SQL Server(版本 2008 和 2012)开展一个销售项目。我需要将销售数据插入表中并为该数据创建发票号码。invoiceNumber我通过将我的列设置为身份列并递增一来完成此操作。
但是现在,我们有一个要求,我们的发票号码之间不能有间隙(除非发票被删除。删除的发票将存储在单独的表中)。
当交易失败时,身份列将丢失发票号码。从 SQL Server 2012 开始,服务器重新启动时它可能会增加 1000。为了摆脱这个问题,我被迫使用INSERT SELECT如下所示的语句
INSERT INTO SalesTable(InvoiceNumber, col1, col2)
VALUES ((SELECT MAX(SalesId) FROM SalesTable + 1), value1, value2)
Run Code Online (Sandbox Code Playgroud)
如果我的软件在单台机器上运行,这可能会很好地工作。
我的问题是,如果我在多个用户同时创建销售发票的软件中使用此代码,两张发票是否有机会获得相同的发票编号?我的意思是发票号码重复?
在插入数据之前在表上使用锁会阻止该问题吗?如果是的话怎么办?使用锁会带来哪些问题?
我发现了类似的问题,但没有找到以最佳方式解决此问题的答案。
对此的任何帮助将不胜感激。谢谢。