我发出以下查询并UPDLOCK
应用:
select @local_var = Column
from table (UPDLOCK)
where OtherColumn = @parameter
发生的情况是多个连接命中此例程,该例程在存储过程中用于计算唯一 ID。一旦获得锁,我们计算下一个 id,更新行中的值并提交。这样做是因为客户对其系统中的某些对象 ID 有特定的格式要求。
锁定正确的UPDLOCK
行并阻塞其他进程,但我们时不时地得到一个重复的 id。在行被锁定之前,局部变量似乎被赋予了当前值。我曾假设在处理语句的选择部分之前会获得锁。
我正在使用SQLServer 2012
并且隔离级别设置为已提交读。
如果需要其他信息,请告诉我。或者,如果我正在做一些明显愚蠢的事情,那么该信息也是受欢迎的。