我有一些文件處理功能,它使用數據庫表來確定文件是否已被處理。SQL Server - 鎖定/阻止方案
IF EXISTS (SELECT * FROM FileTable WITH (UPDLOCK, ROWLOCK, HOLDLOCK)
WHERE FileName = @FileToProcess)
BEGIN
-- File already processed.
END
ELSE
BEGIN
-- Process file.
END
我想要的行爲如下: -
- 只有一個交易應以一次處理一個文件。
- 同時處理不同的文件。
- 如果在處理同一文件時嘗試處理同一個文件,那麼該事務將阻塞,直到另一個文件結束。
我非常確定這是可能的,但是我的SQL鎖定知識並不完美!到目前爲止,我的嘗試要麼在上面的示例中包含鎖定提示,這會導致子彈點2失敗。我嘗試過的所有其他鎖定提示都導致子彈點3失敗。
我錯過了什麼?
[SQL的可能重複服務器進程隊列爭用條件](http://stackoverflow.com/questions/939831/sql-server-process-queue-race-condition) – gbn