gpt4 book ai didi

sql - 行锁 - 手动使用它们

转载 作者:行者123 更新时间:2023-12-04 11:45:25 27 4
gpt4 key购买 nike

我基本上有一个应用程序,它有 5 个线程,每个线程都从一个表中读取。查询是一个简单的 SELECT TOP 1 * from the table,但我想强制锁定,以便下一个线程将从表中选择下一条记录,而不是锁定的记录。当应用程序完成它的任务时,它将更新锁定的记录并释放锁定并再次重复该过程。这可能吗?

最佳答案

我推荐的方法是在记录中设置一个字段,指示是否正在处理记录。然后实现执行以下操作的“从队列中读取下一个”sproc,以确保没有 2 个进程获取相同的记录:

BEGIN TRANSACTION

-- Find the next available record that's not already being processed.
-- The combination of UPDLOCK and READPAST hints makes sure 2 processes don't
-- grab the same record, and that processes don't block each other.
SELECT TOP 1 @ID = ID
FROM YourTable WITH (UPDLOCK, READPAST)
WHERE BeingProcessed = 0

-- If we've found a record, set it's status to "being processed"
IF (@ID IS NOT NULL)
UPDATE YourTable SET BeingProcessed = 1 WHERE ID = @ID

COMMIT TRANSACTION

-- Finally return the record we've picked up
IF (@ID IS NOT NULL)
SELECT * FROM YourTable WHERE ID = @ID

有关这些表提示的更多信息,请参阅 MSDN

关于sql - 行锁 - 手动使用它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2295385/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com