Sql SAP B1中如何生成唯一ID/序列号?

Sql SAP B1中如何生成唯一ID/序列号?,sql,sapb1,Sql,Sapb1,我想知道是否有人知道SAP B1(SAP Business One)如何生成它在各种表中使用的唯一主键。我所说的例子包括OCRD.DocEntry和OCPR.CntctCode。这些整数列“自动”递增 实现这一点的典型方法包括标识列(例如SQL Server)、序列(例如Oracle)或手动序列表,这些序列表包含一个以编程方式递增的Nextval。据我所知,B1没有对这些列使用任何这些技术。那么它是如何处理它们的呢 我正在查看的特定实例使用的是SQL Server数据库 是的,我很清楚,我不需要

我想知道是否有人知道SAP B1(SAP Business One)如何生成它在各种表中使用的唯一主键。我所说的例子包括OCRD.DocEntryOCPR.CntctCode。这些整数列“自动”递增

实现这一点的典型方法包括标识列(例如SQL Server)、序列(例如Oracle)或手动序列表,这些序列表包含一个以编程方式递增的Nextval。据我所知,B1没有对这些列使用任何这些技术。那么它是如何处理它们的呢

我正在查看的特定实例使用的是SQL Server数据库


是的,我很清楚,我不需要“知道”内部工作,不应该在数据库里胡闹,等等。我不知道他们是怎么做的,这让我很烦恼!如果有人能解释,我将不胜感激。

SAPB1使用ONNM表生成新的唯一数字。添加文档时,会发生以下情况

  • SQL事务开始
  • 使用更新锁从ONNM表中查询下一个编号
  • ONNM表格将更新为新编号(+1)
  • 文档已添加
  • SQL事务已提交
运行带有更新锁的SQL SELECT语句将返回当前行,同时锁定该行,直到事务结束。您可以保证,在您选择该行和事务结束之间,没有其他用户可以更改该行

当您在SAP B1中执行操作时,可以使用SQL事件探查器查看执行的语句。这是获取报价单中要使用的下一个数字的行。引用是ObjectType 23


从[dbo].[ONNM]T0中选择T0.*,其中T0.[ObjectCode]=“23”

SAP B1使用ONNM生成序列号

它为在其中注册的每个对象维护一个自动关键点。并根据自动键生成序列号。 对于每个添加事件,此自动关键点将增加+1