我有一些文件处理功能,它使用数据库表来确定文件是否已被处理。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