我们有一个用于生成唯一数字键的表。然后这些键在其他表中用作 PrimaryKey。表结构是这样的:
TableName VARCHAR
CurrentKey INT
所以我们在这张表中有数据
TableName Customers
CurrentKey 400
因此,当我们需要表的下一个主键时,Customers
我们CurrentKey
从该表中获取TableName
is Customers
,它将给我们 400,我们将其递增 (400+1) 并且我们也在表中更新此键。所以我们CurrentKey
现在是401。
我们为此目的使用的sql是:
SQL1:
DECLARE @CurrentKey INT
UPDATE myTable
SET @CurrentKey = CurrentKey = CurrentKey + 1
WHERE TableName = @TableName
我的问题是,如果多个用户同时调用它,我们是否需要锁定表以便密钥不会重复?我确信 SQL Server 不会允许重复数据,但我不知道如何...使用表锁定查询:
SQL2
BEGIN TRANSACTION
DECLARE @CurrentKey INT
UPDATE myTable WITH (TABLOCKX)
SET @CurrentKey = CurrentKey = CurrentKey + 1
WHERE TableName = @TableName
END TRANSACTION
有人可以解释一下 SQL Server 如何处理UPDATE
调用吗?