【发布时间】:2013-12-06 04:48:41
【问题描述】:
我有一个包含此更新查询的存储过程:
UPDATE TOP(1) Batch_tbl
SET locked = 1
OUTPUT inserted.batchId INTO #batchId
FROM Batch_tbl
WHERE locked = 0;
它更新locked = 0的第一行,并设置locked = 1。
如果我有多个线程,是否有可能有 2 个以上的线程更新同一行?这是假设locked一旦为1就永远不会设置回0。
如果是这样,我怎样才能使 2+ 个线程始终更新不同的行?
【问题讨论】:
-
您有什么理由实现自己的锁表/引擎而不是使用 MSSQL 的内置事务行锁? (msdn.microsoft.com/en-us/library/aa213026%28SQL.80%29.aspx)
-
为什么你认为两个线程可以更新同一行?如果是这样,我不相信 MS 能够销售他们的产品。
-
@Hogan 我不知道该怎么想,所以这个问题。
-
@Hogan 是的,我问这个很愚蠢。开心吗?
-
好吧,我不是故意的——我似乎很清楚更新锁是关系数据库功能的一个基本部分,但它可能不是那么明显。
标签: sql sql-server