2014-03-03 78 views
0

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

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

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

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

+2

不,你**不能**做到这一点 - 也不应该**!**通过这样做,你可以*回收*一个'ID'值。 25已被连续使用,并在稍后为其赋予新的含义。真的***真的很糟糕的主意!不要这样做 - 一旦发现“IDENTITY”值,它就消失了 - 不要试图回收这些数据。告诉你的客户调整他的要求.. .. –

回答

1

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

1

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

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

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

但是你应该和你的客户谈谈,检查什么是优先事项,以及他为什么需要序列化值,如果他真的需要他们。对于客户/订单/产品等等,“回收”标识符确实是一种不好的做法。