gpt4 book ai didi

sql-server - 如何在Azure Sql数据库中生成无间隙的严格递增数字

转载 作者:行者123 更新时间:2023-12-03 00:34:08 30 4
gpt4 key购买 nike

我有一个通过 Entity Framework 访问 Sql 数据库的 MVC 5 应用程序。我有一个发票模型,如下所示:

class Invoice 
{
public int Id {get; set;}
public int InvoiceNumber {get; set;}
// other fields ....
}

InvoiceNumber 有很多法律约束。它需要唯一,并且无间隙增量。我最初以为我的 ID 可以完成这项工作,直到我发现由于某些原因,我的 ID 之间可能存在间隙( 1,2,3,...,7 然后 1000 ... ,例如 Windows Azure SQL Database - Identity Auto increment column skips values ) 。考虑到许多客户端可以同时连接,因此这些插入可能是并发的。

有人知道如何强制 EF 或数据库生成这种发票号码吗?

最佳答案

我认为获得这个确切功能的唯一方法是删除标识,在列上添加唯一索引,然后设计一个非常轻量级的流程,向表发出调用以插入下一个值比如

INSERT INTO Invoice (InvoiceID)
OUTPUT inserted.InvoiceID
SELECT MAX(InvoiceID) + 1
FROM Invoice

然后,您可以写回包含整个值的更新,或者将其设置为一次性完成类型的查询,在该查询中,您可以将值作为语句中的一个事务写回,例如当您将所有预期的插入传递到一个写出值的过程。

我不知道如何在 Entity Framework 中执行此操作,因为我没有进行太多应用程序开发,但完成此操作可能需要更长的时间来手动完成,而不是信任表设置。

我当然假设您已经研究了另一个问题中提出的 NOCACHE 解决方案并发现了某种问题?

关于sql-server - 如何在Azure Sql数据库中生成无间隙的严格递增数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20426198/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com