Alter table SQL Server

Modificación de Tablas

Las tablas en la base de datos se deben modificar en algunas ocasiones, es posible agregar o quitar campos, restricciones y cambiar de nombre los campos.

Instrucción Alter table

Para modificar una tabla vamos a presentar las opciones de acuerdo a las necesidades de cambios.

Para cambiar nombre campos

Execute sp_rename NombreCampoOriginal, NuevoNombre, TipoObjeto

Para cambiar Tipo de dato de un campo

Tenga en cuenta si es posible cambiar el tipo de dato, puede que se pierdan los datos o no se pueda ejecutar la orden cuando los tipos de datos no son compatibles.

Alter table NombreTabla Alter column NuevaDefinicionCampo

Para agregar Campo(s) a la tabla

Alter table NombreTabla Add Campo1, Campo2…

Para agregar Restricciones: PK, FK, Check, Default o Unique

Alter table NombreTabla Add constraint NombreConstraint ….

Para eliminar un campo en la tabla

Alter table NombreTabla Drop column ….

Para eliminar una restricción

Alter table NombreTabla Drop constraint NombreRestriccion

Para desactivar o activar una restricción, esta opción solamente es válida para las  restricciones de tipo  Check y FK

Alter table NombreTabla NoCheck | Check  constraint  NombreRestriccion

Ejercicios

Crear una tabla (Ver Creación de Tablas)

Create table Empleados
(
EmpleadosCodigo nchar(3),
EmpleadosPaterno nvarchar(20),
EmpleadosMaterno nvarchar(20),
EmpleadosNombre nvarchar(20),
EmpleadosDireccion nvarchar(300),
EmpleadosFechaNace Date,
constraint EmpleadosCodigoPK primary key (EmpleadosCodigo)
)
go

Los siguientes ejercicios se trabajarán en base a la tabla Empleados creada.

Aumentar el tamaño del campo Código de 3 a 8 caracteres.
Al ser la PK debe eliminar la restricción, modificar el campo y luego agregar la PK.

Alter table Empleados drop constraint EmpleadosCodigoPK
go
Alter table Empleados Alter column EmpleadosCodigo nchar(8) not null
go
Alter table Empleados add constraint EmpleadosPK Primary key (EmpleadosCodigo)
go

Agregar el campo Correo

Alter table Empleados add Correo nvarchar(30)
go

Cambiar el nombre del campo Correo por EmpleadosEmail

Execute sp_rename ‘Empleados.Correo’, ‘EmpleadosEmail’, ‘COLUMN’
go
Precaución: al cambiar cualquier parte del nombre de un objeto pueden dejar de ser scripts válidos y procedimientos almacenados.

Ver la estructura de la tabla

sp_help Empleados
go

Aumentar los campos de los apellidos y el nombre a 100 caracteres de ancho.

Alter table Empleados alter column EmpleadosPaterno nvarchar(100)
Alter table Empleados alter column EmpleadosMaterno nvarchar(100)
Alter table Empleados alter column EmpleadosNombre nvarchar(100)
go

Se pueden visualizar los campos de la tabla empleados, considerando que siempre al inicio del nombre de campo se incluya el nombre de la tabla. Para ello podemos usar la vista del sistema Columns del esquema sys.

select * from sys.columns where name like ‘Empleados%’
go

Agregar los campos teléfono, Página Web y profesión

Alter table Empleados add EmpleadosFono nvarchar(50),
EmpleadosWeb nvarchar(100), EmpleadosProfesion nvarchar(70)
go

Agregar restricción para Email y Página Web que sean únicas.

Alter table Empleados add constraint EmpleadosEmailUQ Unique (EmpleadosEmail)
Alter table Empleados add constraint EmpleadosWebUQ Unique (EmpleadosWeb)
go

Ver las restricciones de la tabla Empleados

select * from sys.key_constraints where name like ‘Empleados%’
go

Agregar el campo sueldo.

Alter table Empleados add EmpleadosSueldo Numeric(9,2)
go

Agregar registros

insert into Empleados
values (‘34958556′,’PEREDA’,’SANCHEZ’, ‘CARLOS’,’BOLIVAR 399′,’12/10/1987′,
‘cperedas@gmail.com’,’346476578′,’www.carlospereda.com’,’Abogado’,2800),
(‘87005984′,’CHAVEZ’,’WONG’, ‘JOSE’,’ALMAGRO 5699′,’26/06/1995′,
‘jchavezzg@gmail.com’,’8976845634′,’www.elmatador.com’,’Ingeniero’,980),
(‘86439064′,’VILLACORTA’,’CAMPOS’, ‘PEDRO’,’SUCRE 6543′,’12/10/1987′,
‘pedirogg@gmail.com’,’85634545′,’www.pedroppee.com’,’Médico’,3600),
(‘24567895′,’ZAVALETA’,’JULCA’, ‘FERNANDO’,’BRASIL 1398′,’24/02/1997′,
‘f24@gmail.com’,’904564564′,’www.ferjpla.com’,’Arquitecto’,870)
go

Agregar restricción para que el sueldo no sea menor a 1200, tenga en cuenta que existen registros que no cumplen con la restricción a agregar, además los registros que no cumplen no se van a modificar.

Alter table Empleados with nocheck add constraint EmpleadosSueldoCK check (EmpleadosSueldo>=1200)
go

Para ver los datos que no cumplen con la restricción agregada.

dbcc checkconstraints (EmpleadosSueldoCK)
go

Se puede hacer una consulta filtrando los valores de la columna Where para saber quienes son los registros con esos sueldos.