2010-01-26 24 views
11

¿Hay alguna forma de cambiar la semilla de identidad para una columna de identidad de forma permanente? El uso de DBCC CHECKIDENT solo parece establecer el last_value. Si la tabla se trunca, todos los valores se restablecen.Cambiar la semilla de identidad en SQL Server (¡permanentemente!)

dbcc checkident ('__Test_SeedIdent', reseed, 1000) 

select name, seed_value, increment_value, last_value 
from sys.identity_columns 
where [object_id] = OBJECT_ID('__Test_SeedIdent'); 

vuelve

name  seed_value increment_value last_value 
------------------------------------------------- 
idIdent 1   1    1000 

Tenía la esperanza de que existiría cierta sintaxis como

alter table dbo.__Test_SeedIdent alter column idIdent [int] identity(1000,1) NOT NULL 

.

¿Es necesario crear una nueva columna, mover los valores, soltar la columna original y renombrar la nueva?

+0

Al ejecutar Profiler, veo que MS crea una tabla temporal, copia los datos, luego descarta la tabla existente y cambia el nombre de la tabla temporal. Probablemente porque no puede haber más de una columna de identidad. – avenmore

Respuesta

15

De los libros en pantalla:

"Para cambiar el valor de la semilla original y sembrar de nuevo las filas existentes, debe quitar la columna de identidad y volver a crearla especificando el nuevo valor de la semilla Cuando la tabla contiene datos, los números de identidad son. agregado a las filas existentes con los valores de inicialización e incremento especificados. El orden en que se actualizan las filas no está garantizado ".

3

MSSQL no le permite agregar o modificar una Identidad en una columna existente a través de TSQL muy fácilmente. Tendría que soltar la columna y volver a agregarla. Huelga decir que esto puede jugar un infierno con las relaciones FK. Puede hacerlo directamente en el administrador de la empresa. Sin embargo, eso no será divertido si tiene que hacer esto en MUCHAS columnas.

¿Es necesario crear una nueva columna , moverse a través de los valores, la caída de la columna original y cambiar el nombre de la nueva ?

Sí, y no se olvide de fijar/actualizar todos los índices, las relaciones de clave externa, etc., que están vinculados a esa columna

+0

¡Y ni siquiera pienses en hacer esto en una mesa grande! – HLGEM

+0

En general, recomiendo no editar ninguna tabla de producción en el Administrador corporativo. Algunas veces copiará, soltará y pegará su tabla para lograr la acción deseada. –

0

"¿Es necesario crear una nueva columna, mover el valores a lo ancho, soltar la columna original y cambiarle el nombre a la nueva? "

Actualmente, en Enterprise Manager, cuando agrega una columna de ID a una tabla existente (o cambia un campo INT PK a una INT PK ID), lo hace detrás de la escena.

Cuestiones relacionadas