重构sql server中的identity字段

时间:2011-01-29 17:07:17

标签: sql sql-server tsql

我有一个标识字段为int的表,我有以下数据

ID      Name
-------------
1       Item1
4       Item2
9       Item3
....

我想重新排序我的身份,如

1 Item1
2 Item2
3 Item3
...

3 个答案:

答案 0 :(得分:2)

您无法更新现有的标识值。 Identity_Insert仅用于允许您使用新插入指定标识列。 您最好的选择可能是创建一个具有相同定义的新表(包括标识列),并将所有记录减去标识列插入到新表中。然后删除旧表,并使用sp_rename重命名新表。请注意,您必须使用此方法删除任何外键。

答案 1 :(得分:0)

一个选项是添加一个新的整数字段来保存顺序值,然后为原始列打开Identity Insert ON,然后迁移新值。

答案 2 :(得分:0)

SQL Server中IDENTITY列的一个限制是它无法直接更新。最好的选择可能是创建一个新表。

通常,如果您关心值的排序,那么不要使用IDENTITY,因为控制排序太难了。请改用常规列。 SQL Server 2011以上版本支持的序列可以为您提供更多控制,并且不需要将目标列设置为只读。