none
請問關於流水號的問題 RRS feed

  • 問題

  • 各位先進好

    我的資料庫中有一欄位是流水號,但是不是 SQL Server 的自動編號,而是我自訂的流水號,像是 A_00001
    A 代表商品種類
    後面的 00001 表示目前資料的筆數
    當使用者按下新增時,才會產生流水號

    但是常常會發生流水號重複的情形,例如:
    A_00005
    B_00005

    我的作法是,當使用者按下新增時,先查詢目前的資料筆數,然後在當作流水號
    查詢 Log 後發現,當有產生重複的流水號的情形時,幾乎是兩位使用者同時在網頁按下新增

    請問這種情形我該如何解決?

    謝謝

    2011年1月31日 上午 03:39

解答

  • 如果底線前方是商品編號 , A_00005和 B_00005也被視為重複嗎 ?

    假設我猜測的是對的, 有一種方法

    (1) 先放自動編號欄位

    (2) 先Insert其它欄位資料, Insert後取回此筆資料的自動編號欄位.

    (3) 將取出的值+商品編號, 然後Update你原先設計的自訂流水號欄位

    請參閱

    [新增後 取得索引值 ]

    PS: @@IDENTITY 和 SCOPE_IDENTITY 的意義有點不同, 請自行參閱T-SQL相關的文件


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。
    • 已標示為解答 saintchou 2011年4月26日 上午 09:30
    2011年1月31日 上午 03:47

所有回覆

  • 如果底線前方是商品編號 , A_00005和 B_00005也被視為重複嗎 ?

    假設我猜測的是對的, 有一種方法

    (1) 先放自動編號欄位

    (2) 先Insert其它欄位資料, Insert後取回此筆資料的自動編號欄位.

    (3) 將取出的值+商品編號, 然後Update你原先設計的自訂流水號欄位

    請參閱

    [新增後 取得索引值 ]

    PS: @@IDENTITY 和 SCOPE_IDENTITY 的意義有點不同, 請自行參閱T-SQL相關的文件


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。
    • 已標示為解答 saintchou 2011年4月26日 上午 09:30
    2011年1月31日 上午 03:47
  • 在新增部分的程式做交易處理.
    2011年1月31日 上午 08:16
  • 各位先進好

    我的資料庫中有一欄位是流水號,但是不是 SQL Server 的自動編號,而是我自訂的流水號,像是 A_00001
    A 代表商品種類
    後面的 00001 表示目前資料的筆數
    當使用者按下新增時,才會產生流水號

    但是常常會發生流水號重複的情形,例如:
    A_00005
    B_00005

    我的作法是,當使用者按下新增時,先查詢目前的資料筆數,然後在當作流水號
    查詢 Log 後發現,當有產生重複的流水號的情形時,幾乎是兩位使用者同時在網頁按下新增

    請問這種情形我該如何解決?

    謝謝

    不知道你這個TABLE的PK是不是有其他欄位,否則你如果拿這個自訂的流水號來當PK或unique,顯然就得自己在AP裡面控管,或是像programlin所說的使用transaction。
    http://www.dotblogs.com.tw/terrychuang/
    2011年1月31日 上午 09:48
  • To saintchou

       請問你的問題解決了嗎 ?


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。
    2011年3月9日 下午 07:45
  • You could consider to get the ID after user Click Save to DB, by doing that, you are inserted the data first and getting the ID at the same time.
    大家一齊探討、學習和研究,謝謝!
    Microsoft MVP, Microsoft Community Star(TW & HK), MCT,
    MCSD, MCAD, MCSE+I, MCDBA, MCDST, MCSA, MCTS, MCITP, MCPD
    2011年3月10日 上午 03:48
  • Hi~

    你可以參考 Bill Chung 或 programlin 大大的作法,最主要是你的 PK 值一定不能重複,且又是你自己要有所掌控自訂,因此你就必需使用你自己自訂的一個機制去防止這樣的情況。

    不外乎如 Bill Chung 所說的,增加一個系統自動編號的欄位,然後再 Insert 該欄位的其他值,最後再 Update 回去,或許這樣能解決你的問題。
    當然使用 transaction 也是非常好的辦法之一,都可以讓你思考看看~


    逐步學習,逐夢踏實;腳步要踩穩,這樣下一步才不會跌倒。 http://www.dotblogs.com.tw/nobel12
    2011年3月10日 上午 07:19