我们如何在sql中的自动生成列中重新生成顺序用户ID

时间:2012-04-18 05:59:58

标签: sql-server-2008

我们如何在SQL Server中的自动生成列中重新生成顺序用户ID?

我有一个数据库,其中Emp_id是一个自动生成的列。我删除了这么多数据,以便Emp_id按顺序排列,即

12
14
21
22
23
56...

所以现在我希望Emp_id重新编号并变成一个序列,即

1
2
3
4
5
6.....

1 个答案:

答案 0 :(得分:0)

当该列是SQL Server中的INT IDENTITY时,您无法更新表中包含的值。

如果这些值已经以其他方式“自动生成”,那么您可以执行以下操作:

;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(公用表表达式)选择“旧”Emp_ID值,并使用Emp_ID排名函数按ROW_NUMBER()列生成新的连续数字。然后,UPDATE语句会获取这两个值,并根据这些值更新您的表格 - 将新的,重新生成的,连续的,无间隙的数字分配给Emp_ID