3

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

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

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

是的,我很清楚这样一个事实,即我没有“需要”了解内部工作原理,不应该在数据库中乱七八糟,等等。我不知道该怎么做,这让我很困扰他们正在这样做!如果有人能解释一下,我将不胜感激。

4

2 回答 2

4

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

  • SQL 事务开始
  • 使用更新锁从 ONNM 表中查询下一个数字
  • ONNM 表使用新数字 (+1) 进行更新。
  • 文档已添加
  • SQL 事务已提交。

运行带有更新锁的 SQL SELECT 语句会返回当前行,同时锁定该行直到事务结束。您可以保证在您选择该行和事务结束之间没有其他用户可以更改该行。

当您在 SAP B1 中执行操作时,您可以使用 SQL Profiler 来观察执行的语句。这是获取下一个要在报价中使用的数字的行。报价是 ObjectType 23。

SELECT T0.* FROM [dbo].[ONNM] T0 WITH (UPDLOCK) WHERE T0.[ObjectCode] = '23'

于 2012-01-10T04:03:06.177 回答
2

SAP B1 使用 ONNM 生成序列号。

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

于 2013-05-06T10:40:31.370 回答