更新具有记录的表的标识列

时间:2014-03-03 10:33:11

标签: sql-server-2012

伙计我在数据库中有一个表,它有大约200多条记录。现在,例如,如果我删除了一个主键(标识列)= 25的记录,那么我的pk列变为23,25,26,27 ...等等

是否有任何可以使用的命令可以更新整个表的标识列? DBCC命令不是我要找的...... "set identity_insert YourTable ON"都没有解决我的问题。

我是否必须截断整个表并重新输入所有数据?如果我的数据库有 200k 行怎么办?这个解决方案是不切实际的。

P.S。请不要问为什么我需要序列化我的PK列。这是我客户的要求。我正在使用SQL Server 2012。

2 个答案:

答案 0 :(得分:1)

IDENTITY仅保证值是唯一的,而不是它们将被序列化(就像你的情况一样)。

您需要将所有数据复制到临时表中并将其复制回来,无法更新IDENTITY列(AFAIK)。

如果您需要更新值,您应该更改设计并将其设置为简单的int列并在其上创建主键。它将解决您未来的问题。

但是你应该和你的客户谈谈,看看他们需要序列化值的优先级和原因是什么。对于客户/订单/产品等等,“回收”标识符确实是一种不好的做法。

答案 1 :(得分:1)

不,Identity列无法重新序列化。您可以使用存储过程(在INSERT上)创建自己的标识列(自动增量列)。它将像Identity列一样工作,您不必担心跳转。