2011-04-13 99 views
2

我想知道是否有人知道SAP B1(SAP Business One)如何生成它在各種表中使用的唯一主鍵。我正在談論的示例包括OCRD.DocEntryOCPR.CntctCode。這些是「自動」遞增的整數列。如何在SAP B1中生成唯一的ID /序列號?

這樣做的典型方法包括標識列(例如SQL Server),序列(例如Oracle)或手持序列表,其中包含以編程方式遞增的Nextval。盡我所知,B1沒有在這些色譜柱中使用這些技術。那麼它是如何處理它們的?

我正在看的特定實例正在使用SQL Server數據庫。

是的,我很清楚,沒有「需要」讓我知道內部運作的知識,不應該在數據庫中徘徊等等。它只是困擾我,我不知道不知道他們是怎麼做的!如果有人能解釋,我會很感激。

回答

2

SAPB1使用ONNM表生成新的唯一號碼。當添加文檔時,會發生以下情況。

  • SQL事務開始
  • 下一個數字從ONNM表中查詢與更新鎖
  • 的ONNM表用新的號碼(+1)更新。
  • 添加文檔
  • SQL事務已提交。

使用更新鎖運行SQL SELECT語句將返回當前行,同時鎖定該行直到事務結束。您保證在您選擇它和事務結束時沒有其他用戶可以更改該行。

您可以使用SQL事件探查器來查看在SAP B1中執行操作時執行的語句。這是獲取下一個數字以在報價中使用的行。報價是對象類型23

SELECT T0 * FROM [DBO]。[ONNM] WITH T0(UPDLOCK)WHERE T0。[目標代碼] = '23'

+0

對不起,以前不接受更早的傑瑞德,不知何故,我從來沒有看到這個答案。 – Rob3C 2012-06-30 10:10:41

+0

嘿Rob3C,沒問題:) – 2012-07-10 00:55:29

1

SAP B1使用ONNM用於序列號的生成。

它爲在其中註冊的每個對象維護一個自動鍵。並根據自動鍵序號生成。 對於每一次添加事件,這個自動密鑰將增加+1