
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.