我在這裏看到了一個關於這個問題的問題,但它已經很老了,所以如果現在有解決方案,我會再問一次。SQL Server 2008:SELECT FOR UPDATE
我的問題是這樣的。我有一個數據庫表,我希望從中選擇,但我想鎖定我選擇的行。這樣做的原因是我可能有另一個正在運行的進程也想要選擇相同的行,我想要阻止它。
想象一下,我有兩個進程在做同樣的事情。一個執行選擇並開始執行其數據處理。然後幾秒鐘後,下一個過程就會出現並執行一個選擇,但由於行未鎖定,它也會採用相同的記錄並開始處理它們。這當然是一個糟糕的情況。在Oracle中,您可以使用SELECT FOR UPDATE,它將取消行的鎖定,以防止它們被第二個進程使用。 SQL Server 2008中如何實現這一點?
我應該補充說我只能使用標準的sql語句。我無法訪問程序,函數等。它必須通過一個簡單的語句來完成。它是一個漫長的故事和一個設計思想,已經從我的手中拿走了。該解決方案必須能夠存儲在表中,稍後檢索,然後通過C#中的ADO對象運行,特別是分配給命令對象。
如何將鎖應用於此聲明?
SELECT *
FROM
(SELECT TOP (20) *
FROM [TMA_NOT_TO_ENTITY_QUEUE]
WHERE [TMA_NOT_TO_ENTITY_QUEUE].[STATE_ID] = 2
ORDER BY TMA_NOT_TO_ENTITY_QUEUE.ID) a
您可以使用[鎖定提示](http://msdn.microsoft.com/zh-cn/library/ms187373。aspx) - 'select * from tbl(updlock)' – 2012-08-14 09:29:46
在看到最終編輯後,立即使用nowait在資源被鎖定時立即返回:'select * from tbl(updlock,nowait)' – 2012-08-14 11:22:14
謝謝我將給出試一試 – CSharpened 2012-08-14 12:03:59