valor una tabla nombre modificar eliminar como columna campo cambiar alterar agregar sql-server

sql-server - una - eliminar columna sql



¿Cómo eliminar una columna de una tabla existente? (9)

En SQL Server 2016 puedes usar nuevas sentencias DIE.

ALTER TABLE Table_name DROP COLUMN IF EXISTS Column_name

La consulta anterior se puede volver a ejecutar, se drops la columna solo si exists en la tabla, de lo contrario no generará un error.

En lugar de usar envoltorios de IF grandes para verificar la existencia de la column antes de soltarla, simplemente puede ejecutar la instrucción DDL anterior

¿Cómo eliminar una columna de una tabla existente?

Tengo una mesa MEN con Fname y Lname

Necesito quitar el Lname

¿Cómo hacerlo?


Esta es la respuesta correcta:

ALTER TABLE MEN DROP COLUMN Lname

Pero ... si existe una CONSTRAINT en la COLUMN , primero debes DROP la CONSTRAINT , luego podrás DROP la COLUMN . Para soltar un CONSTRAINT , ejecute:

ALTER TABLE MEN DROP CONSTRAINT {constraint_name_on_column_Lname}


Esto también se puede hacer a través de la GUI de SSMS. Lo bueno de este método es que le advierte si hay alguna relación en esa columna y también puede eliminarlas automáticamente.

  1. Coloque la tabla en la vista Diseño (haga clic con el botón derecho en la tabla) de esta forma:

  1. Haga clic derecho en la columna en la vista Diseño de la tabla y haga clic en "Eliminar columna"

Como dije antes, si hay alguna relación que también deba ser eliminada, en este punto le preguntaremos si desea eliminarlas también. Es probable que tenga que hacerlo para eliminar la columna.


Genérico:

ALTER TABLE table_name DROP COLUMN column_name;

En tu caso:

ALTER TABLE MEN DROP COLUMN Lname;


La pregunta es, ¿solo puedes eliminar una columna de una tabla inexistente ;-)

BEGIN TRANSACTION IF exists (SELECT * FROM sys.columns c INNER JOIN sys.objects t ON (c.[object_id] = t.[object_id]) WHERE t.[object_id] = OBJECT_ID(N''[dbo].[MyTable]'') AND c.[name] = ''ColumnName'') BEGIN TRY ALTER TABLE [dbo].[MyTable] DROP COLUMN ColumnName END TRY BEGIN CATCH print ''FAILED!'' END CATCH ELSE BEGIN SELECT ERROR_NUMBER() AS ErrorNumber; print ''NO TABLE OR COLUMN FOUND !'' END COMMIT


La respuesta simple a esto es usar esto:

ALTER TABLE MEN DROP COLUMN Lname;

Más de una columna se puede especificar de esta manera:

ALTER TABLE MEN DROP COLUMN Lname, secondcol, thirdcol;

Desde SQL Server 2016 también es posible quitar la columna solo si existe. Esto evita que obtengas un error por algo que probablemente no te importe.

ALTER TABLE MEN DROP COLUMN IF EXISTS Lname;

Hay algunos requisitos previos para eliminar columnas. Las columnas caídas no pueden ser:

  • Utilizado por un índice
  • Usado por las restricciones CHECK, FOREIGN KEY, UNIQUE, o PRIMARY KEY.
  • Asociado con un DEFAULT
  • Atado a una regla

Si alguno de los anteriores es cierto, primero debe eliminar esas asociaciones.

Además, debe tenerse en cuenta que al eliminar una columna no se recupera el espacio del disco duro hasta que se reconstruye el índice agrupado de la tabla. Como tal, a menudo es una buena idea seguir lo anterior con un comando de reconstrucción de tabla como este:

ALTER TABLE MEN REBUILD;

Finalmente, como algunos han dicho, esto puede ser lento y probablemente bloqueará la tabla por la duración. Es posible crear una nueva tabla con la estructura deseada y luego cambiar el nombre de esta manera:

SELECT Fname -- Note LName the column not wanted is not selected INTO new_MEN FROM MEN; EXEC sp_rename ''MEN'', ''old_MEN''; EXEC sp_rename ''new_MEN'', ''MEN''; DROP TABLE old_MEN;

Pero tenga en cuenta que hay una ventana para la pérdida de datos de las filas insertadas entre el primer comando de selección y el último cambio de nombre.


Para agregar columnas en la tabla existente:

ALTER TABLE table_name ADD column_name DATATYPE NULL

Para eliminar columnas en la tabla existente:

ALTER TABLE table_name DROP COLUMN column_name


Su ejemplo es simple y no requiere ningún cambio de tabla adicional, pero en general no es tan trivial.

Si otras columnas hacen referencia a esta columna, entonces necesita averiguar qué hacer con otras tablas / columnas. Una opción es eliminar las claves externas y mantener los datos de referencia en otras tablas.

Otra opción es buscar todas las columnas de referencia y eliminarlas también si ya no son necesarias.

En tales casos, el verdadero desafío es encontrar todas las claves externas. Puede hacerlo consultando las tablas del sistema o utilizando herramientas de terceros como ApexSQL Search (gratis) o Red Gate Dependency tracker (premium pero más funciones). Hay un hilo entero en llaves foráneas here


ALTER TABLE MEN DROP COLUMN Lname