sql >> Base de Datos >  >> RDS >> Sqlserver

¿Cómo agrega una columna NOT NULL a una tabla grande en SQL Server?

Me encontré con este problema para mi trabajo también. Y mi solución está en el #2.

Estos son mis pasos (estoy usando SQL Server 2005):

1) Agregue la columna a la tabla con un valor predeterminado:

ALTER TABLE MyTable ADD MyColumn varchar(40) DEFAULT('')

2) Agregue un NOT NULL restricción con NOCHECK opción. El NOCHECK no se aplica a los valores existentes:

ALTER TABLE MyTable WITH NOCHECK
ADD CONSTRAINT MyColumn_NOTNULL CHECK (MyColumn IS NOT NULL)

3) Actualizar los valores de forma incremental en la tabla:

GO
UPDATE TOP(3000) MyTable SET MyColumn = '' WHERE MyColumn IS NULL
GO 1000
  • La declaración de actualización solo actualizará un máximo de 3000 registros. Esto permite guardar una parte de los datos en ese momento. Tengo que usar "MyColumn IS NULL" porque mi tabla no tiene una clave principal de secuencia.

  • GO 1000 ejecutará la instrucción anterior 1000 veces. Esto actualizará 3 millones de registros, si necesita más, simplemente aumente este número. Continuará ejecutándose hasta que SQL Server devuelva 0 registros para la instrucción UPDATE.