【发布时间】:2018-05-19 20:44:05
【问题描述】:
我有一个包含多行的表。我还有一个多线程应用程序,它读取状态 = 1 的行,然后在读取后将其更改为状态 = 2。
但是,由于应用程序的多线程特性,它会不断读取同一行两次(通过不同的线程)。我知道这是一个并发问题,但我无法解决。
截至目前,我将这一行解读为:
SELECT TOP 1 * FROM Inbox WHERE Status = 1 ORDER BY ID DESC;
然后,使用 ID 更新行:
UPDATE Inbox SET Status = 2 WHERE ID = X;
我希望查询锁定一行,因为它选择了它的 ID 并返回它,这样其他线程就无法读取它。
【问题讨论】:
-
您是否尝试过使用
rowversion列? -
您的应用程序是用什么语言编写的?
-
@DavidG 我将如何使用它?
-
@Jaques 我正在使用 Java。
标签: sql sql-server concurrency