190 votos

SQL Server agregar auto incremento la clave principal para la tabla existente

Como el título, tengo una tabla existente que ya está poblada de 150000 registros. He añadido una columna Id (que es actualmente nula).

Supongo que puedo correr una consulta para llenar esta columna con números incrementales y entonces se fija como clave primaria y encender incremento automático. ¿Esta es la forma correcta de proceder? Y si es así, ¿cómo lo llene los números iniciales?

331voto

marc_s Puntos 321990

No - tienes que hacerlo al revés: añadirlo justo desde el vamos como INT IDENTITY -se llenará con valores de identidad cuando haces esto:

ALTER TABLE dbo.YourTable
   ADD ID INT IDENTITY

y entonces puedes hacerlo la clave primaria:

ALTER TABLE dbo.YourTable
   ADD CONSTRAINT PK_YourTable
   PRIMARY KEY(ID)

18voto

gbn Puntos 197263

No se puede "encender" la identidad: es una reconstrucción de la tabla.

Si no te importa el orden del número, usted agregaría la columna NOT NULL, con la identidad de una sola vez. 150 filas k no es mucho.

Si necesita conservar un orden del número, luego agregar los números en consecuencia. Entonces utilice el diseñador de tablas MEP para establecer la propiedad IDENTITY. Esto le permite generar un script que hará la columna gota/agregar/guardar números/resiembra para ti.

9voto

Kevin Puntos 757

Yo tenía este problema, pero no podía usar una columna de identidad (por diversas razones). Me puse esto:

DECLARE @id INT
SET @id = 0 
UPDATE table SET @id = id = @id + 1 

Tomado de aquí.

2voto

user3279092 Puntos 1

Cuando añadimos y columna de identidad en una tabla existente será automáticamente no pueblan hace falta rellenarlo manualmente.

-3voto

PacDemon Puntos 9

Intentar algo así (en una prueba de la tabla primero):

USO your_database_name
ir
mientras (seleccione COUNT(*) de your_table donde your_id_field es NULL) > 0
comenzar
    SET ROWCOUNT 1
    UPDATE your_table SET your_id_field = MAX (your_id_field) + 1
final
imprimir 'Bien'

¡ No se han probado esto en absoluto, así que ten cuidado!

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X