我们有一个用于生成唯一数字键的表。这些键然后用作其他表中的PrimaryKey。表结构是这样的:
TableName VARCHAR CurrentKey INT
所以我们在这个表中有数据
TableName Customers CurrentKey 400
所以,当我们需要下一个主键表中Customers我们可以得到CurrentKey从这个表,其中TableName是Customers,它会给我们400,我们的增量(400 + 1),它和我们更新表也是这个关键。所以我们CurrentKey现在是401。
Customers
CurrentKey
TableName
我们用于此目的的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呼叫吗?
UPDATE
每个SQL语句都在事务中运行,并且update语句始终使用锁来保护其更新。SQL Server不允许您读取半修改的行(某些例外情况是大于8k的数据。)
update
您的第一句话应该没问题。