1
我正在與一個存儲的過程工作:排隊請求到SQL Server存儲過程
確定表中的行的數量,其中chosenBy列爲空
緯紗之一這些行隨機
更新該行
的chosenBy列的行返回給客戶機
如何防止客戶在完全同時選擇的情況下選擇同一行?
我已經嘗試過各種表提示和隔離級別,但只是在客戶端得到死鎖異常。我只希望第二個電話等待幾秒鐘,直到第一個電話完成。
我正在與一個存儲的過程工作:排隊請求到SQL Server存儲過程
確定表中的行的數量,其中chosenBy列爲空
緯紗之一這些行隨機
更新該行
的chosenBy列的行返回給客戶機
如何防止客戶在完全同時選擇的情況下選擇同一行?
我已經嘗試過各種表提示和隔離級別,但只是在客戶端得到死鎖異常。我只希望第二個電話等待幾秒鐘,直到第一個電話完成。
避免死鎖的一種方法(如問題標題所示)將串行訪問該過程。
您可以sp_getapplock
和sp_releaseapplock
見Application Locks (or Mutexes) in SQL Server 2005對於一些示例代碼做到這一點。
本質上你是[使用表作爲隊列](http://rusanu.com/2010/03/26/using-tables-as-queues/),但它真的*需要是隨機的大大增加了這個問題。 –
只要它看起來相對隨機(即它不是連續的),那就足夠了。 –
如何使用'sp_getapplock'串行訪問存儲過程而不是嘗試管理併發性並避免死鎖的解決方案呢? –