SQL Server agrega clave primaria de incremento automático a la tabla existente
Como título, tengo una tabla existente que ya está llena con 150000 registros. Agregué una columna de identificación (que actualmente es nula).
Supongo que puedo ejecutar una consulta para completar esta columna con números incrementales y luego establecerla como clave principal y activar el incremento automático. ¿Es esta la forma correcta de proceder? Y si es así ¿cómo completo los números iniciales?
No, tienes que hacerlo al revés: agrégalo desde el principio INT IDENTITY
, ya que se llenará con valores de identidad cuando hagas esto:
ALTER TABLE dbo.YourTable
ADD ID INT IDENTITY
y luego puedes convertirla en la clave principal:
ALTER TABLE dbo.YourTable
ADD CONSTRAINT PK_YourTable
PRIMARY KEY(ID)
o si prefieres hacerlo todo en un solo paso:
ALTER TABLE dbo.YourTable
ADD ID INT IDENTITY
CONSTRAINT PK_YourTable PRIMARY KEY CLUSTERED
No se puede "activar" la IDENTIDAD: es una reconstrucción de la tabla.
Si no le importa el orden de los números, agregaría la columna NOT NULL con IDENTITY de una sola vez. 150.000 filas no es mucho.
Si necesita conservar algún orden numérico, sume los números en consecuencia. Luego use el diseñador de tablas SSMS para establecer la propiedad IDENTIDAD. Esto le permite generar un script que eliminará/agregará/mantendrá números/resembrará la columna por usted.
Tuve este problema, pero no pude usar una columna de identidad (por varias razones). Me decidí por esto:
DECLARE @id INT
SET @id = 0
UPDATE table SET @id = id = @id + 1
Tomado prestado de aquí .
Si la columna ya existe en su tabla y es nula, puede actualizar la columna con este comando (reemplace id, nombre de tabla y clave de tabla):
UPDATE x
SET x.<Id> = x.New_Id
FROM (
SELECT <Id>, ROW_NUMBER() OVER (ORDER BY <tablekey>) AS New_Id
FROM <tablename>
) x