我想知道是否有人知道 SAP B1 (SAP Business One) 如何生成它在各种表中使用的唯一主键。我所说的示例包括 OCRD.DocEntry 和 OCPR.CntctCode。这些“自动”递增的整数列。
执行此操作的典型方法包括标识列(例如 SQL Server)、序列(例如 Oracle)或包含以编程方式递增的 Nextval 的手动序列表。据我所知,B1 没有对这些列使用任何这些技术。那么它是如何处理它们的呢?
我正在查看的特定实例正在使用 SQL Server 数据库。
是的,我很清楚我没有“需要”了解内部工作原理,不应该在数据库中乱搞等等。这让我很困扰,我不知道不知道他们是怎么做到的!如果有人能解释一下,我将不胜感激。
最佳答案
SAPB1 使用 ONNM 表生成新的唯一编号。添加文档时,会发生以下情况。
- SQL 事务开始
- 使用更新锁从 ONNM 表中查询下一个数字
- ONNM 表已更新为新编号 (+1)。
- 文档已添加
- SQL 事务已提交。
运行带有更新锁的 SQL SELECT 语句返回当前行,同时锁定该行直到事务结束。您可以保证在您选择它和交易结束之间没有其他用户可以更改该行。
您可以使用 SQL Profiler 来观察在 SAP B1 中执行操作时执行的语句。这是获取要在报价单中使用的下一个数字的行。引用是 ObjectType 23。
SELECT T0.* FROM [dbo].[ONNM] T0 WITH (UPDLOCK) WHERE T0.[ObjectCode] = '23'
关于sql - SAP B1 中如何生成唯一 ID/序列号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5652912/