伙计我在数据库中有一个表,它有大约200多条记录。现在,例如,如果我删除了一个主键(标识列)= 25的记录,那么我的pk列变为23,25,26,27 ...等等
是否有任何可以使用的命令可以更新整个表的标识列?
DBCC
命令不是我要找的...... "set identity_insert YourTable ON"
都没有解决我的问题。
我是否必须截断整个表并重新输入所有数据?如果我的数据库有 200k 行怎么办?这个解决方案是不切实际的。
P.S。请不要问为什么我需要序列化我的PK列。这是我客户的要求。我正在使用SQL Server 2012。
答案 0 :(得分:1)
IDENTITY仅保证值是唯一的,而不是它们将被序列化(就像你的情况一样)。
您需要将所有数据复制到临时表中并将其复制回来,无法更新IDENTITY列(AFAIK)。
如果您需要更新值,您应该更改设计并将其设置为简单的int列并在其上创建主键。它将解决您未来的问题。
但是你应该和你的客户谈谈,看看他们需要序列化值的优先级和原因是什么。对于客户/订单/产品等等,“回收”标识符确实是一种不好的做法。
答案 1 :(得分:1)
不,Identity列无法重新序列化。您可以使用存储过程(在INSERT上)创建自己的标识列(自动增量列)。它将像Identity列一样工作,您不必担心跳转。