SQL Server の自動生成された列で連続したユーザー ID を再生成するにはどうすればよいですか?
Emp_id
自動生成された列があるデータベースがあります。非常に多くのデータを削除したため、Emp_id
順不同になります。
12
14
21
22
23
56...
Emp_id
だから今、番号を付け直してシーケンスに変えたい
1
2
3
4
5
6.....
SQL Server の自動生成された列で連続したユーザー ID を再生成するにはどうすればよいですか?
Emp_id
自動生成された列があるデータベースがあります。非常に多くのデータを削除したため、Emp_id
順不同になります。
12
14
21
22
23
56...
Emp_id
だから今、番号を付け直してシーケンスに変えたい
1
2
3
4
5
6.....
その列がINT IDENTITY
SQL Server の場合、テーブルに含まれている値を既に更新することはできません。
これらの値が他の方法で「自動生成」されている場合は、次のようにすることができます。
;WITH RegeneratedValues AS
(
SELECT
Emp_ID,
NewID = ROW_NUMBER() OVER (ORDER BY Emp_ID)
FROM
dbo.YourTable
)
UPDATE dbo.YourTable
SET Emp_ID = regen.NewID
FROM RegeneratedValues regen
WHERE dbo.YourTable.Emp_ID = regen.Emp_ID
CTE (Common Table Expression) は「古い」値を選択し、ランキング関数を使用して、その列Emp_ID
によって新しい連続番号を生成します。次に、ステートメントはこれらの 2 つの値を取得し、それらに基づいてテーブルを更新します。新しい再生成された連続したギャップのない数値をEmp_ID
ROW_NUMBER()
UPDATE
Emp_ID