2011-12-06 82 views
0

我有一個要求,其中調用Web服務來生成列表中的下一個數字。鎖定表讀取

有多個客戶端,我不想鎖定整個表只是客戶端的記錄,我得到的下一個數字。每個客戶都有自己的編號系統。

但是,我需要鎖定表讀取特定的記錄,以便我可以生成新的數字,保存並返回它。

我正在考慮將整個列表加載到內存中,在那裏進行更改,然後使用enqueue和dequeue來簡化請求,但這不是以客戶端爲中心的。由於要求很低,因此在一天結束時不應成爲問題。

我們使用實體框架和LINQ進行數據訪問。

我想我問的是你可能會用什麼辦法鎖定閱讀作爲主要問題。

+0

它是安全的假設SQL服務器或者你需要支持其他後端:

,我們所得到的是下一個記錄編號(不是我們的數據庫設計),我們通常在插入使用它? –

+0

是的SQL服務器 – griegs

回答

3

假設您使用的是SQL Server,我們處理此問題的方式是在SELECT語句中使用UPDLOCK表提示執行SQL查詢。

INSERT 
    INTO TableName (RecordNumber) 
SELECT ISNULL(MAX(RecordNumber, 0) + 1 
    FROM TableName WITH (UPDLOCK) 
+0

+1這是非常乾淨的方式來避免競爭條件。 –

+0

+1,是的,我喜歡這個,看起來好像是我想的那樣認爲 – griegs

+0

太棒了,謝謝先生。 – griegs