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

标签 sql sapb1

我想知道是否有人知道 SAP B1 (SAP Business One) 如何生成它在各种表中使用的唯一主键。我所说的示例包括 OCRD.DocEntryOCPR.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/

相关文章:

sql - 使用 where 语句选择表中的所有内容...

c# - SAP B1 : Read from Matrix

c# - 使用 DI API 将 Sap B1 hana 与 C# 应用程序连接

mysql - SQL 查询选择最近 15 分钟的数据

sql - PostgreSQL - 优化查询性能

mysql - SQL 数据库帮助 - MySQL Workbench

python - 在 Django 中的 SAP 和 DataModel 之间同步数据

drupal-7 - Drupal Commerce 和 SAP Business One

sql - 使用公用键用另一个表的数据更新一个表