在许多情况下,我需要从SQL Server中的数字系列中获取唯一标识符。我所拥有的是一个包含数字系列名称,最小值,最大值和当前值的表。
Series Min Max Current
-------------------------------------------
Testseries 1 999 23
现在我使用UPDATE ... OUTPUT
语句安全地递增并输出当前值。所有其他方法(例如:UPDATE
当前和SELECT
必然会迟早导致竞争条件。
现在我发现了以下语法:
DECLARE @newId INT
UPDATE Numberseries
SET
@newId = Current += 1
WHERE
Series = '...'
这可以在任何时候起作用,我只更新一行,因为Series
是主键。
我的问题是:这也是一个像UPDATE ... OUTPUT
语句那样的原子操作,这样两个客户端在同时调用中得不到相同的值吗?
答案 0 :(得分:0)
您不应该使用表格,因为UPDATE
实际上不是原子的(至少在某些DBS上)!如果INSERT
使用了值且对该值有UNIQUE
- 约束,则可以使用它;你必须在碰撞后重试。
真正的解决方案是使用SEQUENCE
- 这就是他们的目的。