iT邦幫忙

0

根據日期生成唯一單號問題

根據日期生成唯一單號問題,示例:SFT-20190319-000001,SFT-20190319-000002。
目前生成單號程序,會生成少量重複的問題,懷疑是并發訪問導致的。請問有沒有什麽辦法可以避免生成重複的單號呢?
現在在方案是將生成條碼邏輯放在sqlserver的存儲過程中,C#程序調用后,會得到一個單號,存儲過程中會根據最大的單號值,加1,再返回,用多線程測試過,確定會生成重複的單號。

看更多先前的討論...收起先前的討論...
froce iT邦大師 3 級 ‧ 2019-03-19 16:18:07 檢舉
利用timestamp可以減少這問題。
然後要生成單號前先檢查是否有此單號。
寫入時請使用交易鎖定,只要發現單號重複就退回單據重新產生單號再存回資料庫,之後再顯示結果給使用者,尚未儲存的單據,單號要顯示暫用,之後才是正式單號
marlin12 iT邦新手 2 級 ‧ 2019-03-19 18:42:13 檢舉
把那個c#程序包含在lock陳述式內
https://docs.microsoft.com/zh-tw/dotnet/csharp/language-reference/keywords/lock-statement
@marlin12 ,謝謝大佬,目前是在C#程序裡面使用了lock,暫時可以解決重複問題.
@froce , 我們有判斷是否有此單號,但是有幷發訪問的時候,也不管用.
@穷嘶发发发 ,您是指使用transaction鎖定嗎,這個我試試哈,謝謝大佬

尚未有邦友回答

立即登入回答