小编Ade*_*dan的帖子

将发票号码(没有任何间隙)插入表格的最佳方法是什么

我正在使用 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)

如果我的软件在单台机器上运行,这可能会很好地工作。

我的问题是,如果我在多个用户同时创建销售发票的软件中使用此代码,两张发票是否有机会获得相同的发票编号?我的意思是发票号码重复?

在插入数据之前在表上使用锁会阻止该问题吗?如果是的话怎么办?使用锁会带来哪些问题?

我发现了类似的问题,但没有找到以最佳方式解决此问题的答案。

对此的任何帮助将不胜感激。谢谢。

sql database sql-server sql-server-2008

1
推荐指数
1
解决办法
1814
查看次数

标签 统计

database ×1

sql ×1

sql-server ×1

sql-server-2008 ×1