一意の数値キーを生成するために使用されるテーブルがあります。これらのキーは、他のテーブルで PrimaryKey として使用されます。テーブル構造は次のようになります。
TableName VARCHAR
CurrentKey INT
したがって、このテーブルには次のようなデータがあります
TableName Customers
CurrentKey 400
したがって、テーブルの次の主キーが必要な場合は、このテーブルからCustomers
を取得します。これにより、400 が得られ、インクリメント (400+1) され、テーブル内のこのキーも更新されます。だから私たちは今401です。CurrentKey
TableName
Customers
CurrentKey
この目的で使用する 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
UPDATE
SQL Server が呼び出しを処理する方法を誰か説明してもらえますか?