我想知道是否有人知道SAP B1(SAP Business One)如何生成它在各种表中使用的唯一主键。我所谈论的例子包括 OCRD.DocEntry 和 OCPR.CntctCode 。这些是“自动”递增的整数列。
这样做的典型方法包括标识列(例如,SQL Server),序列(例如,Oracle),或者保存以编程方式递增的Nextval的手动序列表。据我所知,B1并未对这些列使用任何这些技术。那怎么处理它们呢?
我正在查看的特定实例是使用SQL Server数据库。
是的,我很清楚我不需要知道有关内部工作的知识,不应该在数据库中捣乱等等。我只是在困扰我我知道他们是怎么做到的!如果有人能解释,我将不胜感激。
答案 0 :(得分:3)
SAPB1使用ONNM表生成新的唯一编号。添加文档时会发生以下情况。
使用更新锁运行SQL SELECT语句将返回当前行,同时锁定该行直到事务结束。您可以保证在您选择它和交易结束时,没有其他用户可以更改该行。
您可以使用SQL事件探查器来监视在SAP B1中执行操作时执行的语句。这是获取报价中使用的下一个数字的行。报价是ObjectType 23。
SELECT T0。* FROM [dbo]。[ONNM] T0 WITH(UPDLOCK)WHERE T0。[ObjectCode] ='23'
答案 1 :(得分:2)
SAP B1使用ONNM生成序列号。
它为在其中注册的每个对象维护一个自动键。并且将基于自动键序列号生成。 对于每个添加事件,此自动键将增加+1