這是更多的知識共享帖子。SQL計數器遞增併發問題 - 選擇/更新問題
最近在我的一個項目中,我遇到了一個很常見的問題,但直到遇到它時才真正給它一個想法。 有很多解決方案可用,但不知何故,我沒有找到我正在尋找的那個,我將在這篇文章中分享。我相信你們中的許多人已經知道下面的解決方案,但對於那些不這樣做的人肯定可以成爲救命的人。 :-)
問題:
最近,我正在開發一個windows服務。這項服務應該將一些記錄插入一個長期存在並被其他幾個舊服務使用的表中。有一個列(稱爲「ID」),它包含一個整數值。拿到整數插入到該表中寫入(可能是年前)的邏輯如下陳述:
邏輯:
- 從表中讀取的值(假設表1 - 名稱/值對),
- 增量它由1
- 更新的值和
- 最後得到新的值[/亮點。
代碼
SELECT @value = [Value] from [dbo].[Table1] WHERE [Name] = @Name;
UPDATE [dbo].[ Table1] SET [Value] = @value +1 WHERE [Name] = @Name;
SELECT @value = @value+1;
使用該技術具有重大的併發問題。
-
由多個線程讀取
- 值相同
- 死鎖問題
什麼是解決這種問題的最好辦法 - 考慮到這是在許多不同的應用程序/服務的簡稱?
您可以編輯問題,以便它只包含問題,並與您的解決方案創建一個單獨的答案?請參閱[我可以回答我自己的問題?](http://stackoverflow.com/help/self-answer)瞭解更多信息。 – sstan
也許可以添加一些文檔鏈接,那是什麼'OUTPUT插入',這是所有rdbms或特別是一個? –
附件在哪裏? –