2014-02-05 39 views
1

我想開發一個小型Winform軟件C#,SQL Server 2008 R2可以在3臺計算機上運行。如何獲取並鎖定下一個標識值SQL Server

我設計了一個INDENTITY type primay key(CusId)的「Customer_Master」表。

我想要的是,讓我們說當我打開一個客戶註冊表單,然後程序應該顯示下一個ID值。我可以通過使用SCOPE_IDENTITY()獲得下一個身份值。 但在這種情況下,因爲我使用的是集中式系統,如果所有計算機都試圖同時創建一個新客戶,它將在其註冊表單中顯示相同的密鑰。但是,如果他們註冊了新客戶,註冊的ID將與所顯示的不同。

所以我想鎖定下一個身份值註冊客戶的ID在窗體中顯示。 如何做到這一點。有什麼辦法來管理併發插入。 我正在使用C#和SQL Server R2 Express。

請幫我解決這個問題。 在此先感謝。作爲與INSERT執行判斷下一序列

+3

爲什麼有要求告訴人們什麼身份價值將提前? –

回答

1

你真的需要插入記錄之前的ID ?如果不是,那麼SCOPE_IDENTITY將正常工作。如果新記錄的插入有效,那麼SCOPE_IDENTITY將返回客戶端插入的記錄的id(不是任何其他客戶端)。

如果你事先需要ID,那麼你可以插入一個「存根」記錄作爲佔位符,直到客戶端寫入「真實」客戶記錄。這樣,在寫實際數據之前,每個客戶端本質上可以保留該ID。

但是,這不是一個好主意,因爲它會導致表中的垃圾數據很多。

2

不使用的身份,你「想」什麼是不可能用INT IDENTITY。你也不能「猜測」下一個數字是什麼,因爲有不能保證身份將是連續的。我不認爲這是一個非常明智的決定,但是如果你真的需要這樣做,那麼你需要創建一個表來完成目的,以便按順序遞增並使用該值作爲PK並從Customer_Master表中刪除IDENTITY規範。

+0

謝謝..我不一定需要身份值。我只能使用非標識主鍵列。在那之後,做什麼是我上面說的。 – Daybreaker