1

SQL Server の自動生成された列で連続したユーザー ID を再生成するにはどうすればよいですか?

Emp_id自動生成された列があるデータベースがあります。非常に多くのデータを削除したため、Emp_id順不同になります。

12
14
21
22
23
56...

Emp_idだから今、番号を付け直してシーケンスに変えたい

1
2
3
4
5
6.....
4

1 に答える 1

0

その列がINT IDENTITYSQL 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_IDROW_NUMBER()UPDATEEmp_ID

于 2012-04-18T06:06:20.893 に答える