84 - Alterar campos (alter table - alter)


Primer problema:
Trabaje con una tabla llamada "empleados".
1- Elimine la tabla, si existe y créela:
 if object_id('empleados') is not null
  drop table empleados;

 create table empleados(
  legajo int not null,
  documento char(7) not null,
  nombre varchar(10),
  domicilio varchar(30),
  ciudad varchar(20) default 'Buenos Aires',
  sueldo decimal(6,2),
  cantidadhijos tinyint default 0,
  primary key(legajo)
 );

2- Modifique el campo "nombre" extendiendo su longitud.

3- Controle la modificación:
 sp_columns empleados;

4- Modifique el campo "sueldo" para que no admita valores nulos.

4- Modifique el campo "documento" ampliando su longitud a 8 caracteres.

5- Intente modificar el tipo de datos del campo "legajo" a "tinyint":
 alter table empleados
  alter column legajo tinyint not null;
No se puede porque tiene una restricción.

6- Ingrese algunos registros, uno con "nombre" nulo:
 insert into empleados values(1,'22222222','Juan Perez','Colon 123','Cordoba',500,3);
 insert into empleados values(2,'30000000',null,'Sucre 456','Cordoba',600,2);

7- Intente modificar el campo "nombre" para que no acepte valores nulos:
 alter table empleados
  alter column nombre varchar(30) not null;
No se puede porque hay registros con ese valor.

8- Elimine el registro con "nombre" nulo y realice la modificación del punto 7:
 delete from empleados where nombre is null;
 alter table empleados
  alter column nombre varchar(30) not null;

9- Modifique el campo "ciudad" a 10 caracteres.

10- Intente agregar un registro con el valor por defecto para "ciudad":
 insert into empleados values(3,'33333333','Juan Perez','Sarmiento 856',default,500,4);
No se puede porque el campo acepta 10 caracteres y  el valor por defecto tiene 12 caracteres.

11- Modifique el campo "ciudad" sin que afecte la restricción dándole una longitud de 15 caracteres.

12- Agregue el registro que no pudo ingresar en el punto 10:
 insert into empleados values(3,'33333333','Juan Perez','Sarmiento 856',default,500,4);

13- Intente agregar el atributo identity de "legajo".
No se puede agregar este atributo.
Ver solución

 if object_id('empleados') is not null
  drop table empleados;

 create table empleados(
  legajo int not null,
  documento char(7) not null,
  nombre varchar(10),
  domicilio varchar(30),
  ciudad varchar(20) default 'Buenos Aires',
  sueldo decimal(6,2),
  cantidadhijos tinyint default 0,
  primary key(legajo)
 );

 alter table empleados
  alter column nombre varchar(30);

 sp_columns empleados;

 alter table empleados
  alter column sueldo decimal(6,2) not null;

 alter table empleados
  alter column documento char(8) not null;

 alter table empleados
  alter column legajo tinyint not null;

 insert into empleados values(1,'22222222','Juan Perez','Colon 123','Cordoba',500,3);
 insert into empleados values(2,'30000000',null,'Sucre 456','Cordoba',600,2);

 alter table empleados
  alter column nombre varchar(30) not null;

 delete from empleados where nombre is null;
 alter table empleados
  alter column nombre varchar(30) not null;

 alter table empleados
  alter column ciudad varchar(10);

 insert into empleados values(3,'33333333','Juan Perez','Sarmiento 856',default,500,4);

 alter table empleados
  alter column ciudad varchar(15);

 insert into empleados values(3,'33333333','Juan Perez','Sarmiento 856',default,500,4);

 alter table empleados
  alter column legajo int identity;



 

Retornar