2012-01-08 24 views
5

Hola a todos, quiero resembrar mis valores de COLUMNAS DE IDENTIDAD a partir de 1 Sé cómo hacer esto con DBCC CHECKIDENT, sin embargo, me gustaría reemplazar el valor en todas las filas existentes. Esta tabla tiene un poco más de 2 millones de filas.Cómo resembrar/reemplazar columnas de identidad en datos existentes

¿Cuál es el mejor enfoque para esta tarea?

Respuesta

6

Simplemente puede agregar una nueva columna de identidad, a la How to add a new identity column to a table in SQL Server?. Simplemente elimine la columna anterior y vuelva a agregarla. Esto romperá cualquier clave externa, por supuesto, pero supongo que ya que estás volviendo a enumerar todo lo que supongo que está bien.

+2

Si tiene relaciones de claves forign, sugiero preservar la columna anterior hasta que pueda actualizar todas las tablas secundarias con el nuevo valor de id. Ellos pueden soltarlo. – HLGEM

+0

El problema es que SQL Server no puede tener varias columnas de identidad en una tabla: http://stackoverflow.com/questions/349092/can-a-sql-server-table-have-two-identity-columns. Debería quitar primero el atributo de identidad del anterior. –

+1

YEs, es cierto que necesita eliminar la propiedad de identidad. – HLGEM

2

Ver este ejemplo la forma de sustituir los valores, pero RESEED es otra cosa:

CREATE TABLE t (id INT IDENTITY) 
GO 
INSERT t DEFAULT VALUES 
GO 25 

SET IDENTITY_INSERT t ON 

delete t 

OUTPUT DELETED.Id+100 INTO T(Id) 

SET IDENTITY_INSERT t Off 

SELECT * FROM t 

DROP TABLE t 

Un ejemplo de reinicialización:

DBCC CHECKIDENT('YourTableName', 150, reseed) 

Y

Si usted tiene que reemplace el valor - con 2M filas definitivamente tiene que tomar tiempo

+0

gracias por su sugerencia – jr3

Cuestiones relacionadas