152 - Disparador (condicionales)


Primer problema:
Una empresa almacena los datos de sus empleados en una tabla denominada "empleados" y en otra tabla 
denominada "secciones", información sobre las distintas secciones de la empresa.
1- Elimine las tablas si existen y créelas con los siguientes campos:
 if object_id('empleados') is not null
  drop table empleados;
 if object_id('secciones') is not null
  drop table secciones;

 create table secciones(
  codigo int identity,
  nombre varchar(30),
  constraint pk_secciones primary key (codigo)
 ); 

 create table empleados(
  documento char(8) not null,
  nombre varchar(30),
  domicilio varchar(30),
  seccion int not null,
  constraint pk_empleados primary key (documento),
  constraint fk_empleados_seccion foreign key(seccion)
   references secciones (codigo)
 ); 

2- Ingrese algunos registros:
 insert into secciones values('Secretaria');
 insert into secciones values('Sistemas');
 insert into secciones values('Contaduría');
 insert into secciones values('Gerencia');

 insert into empleados values('22222222','Alejandro Acosta','Avellaneda 90',1);
 insert into empleados values('22333333','Betina Bustos','Bulnes 345',2);
 insert into empleados values('23444444','Camila Costa','Colon 234',1);
 insert into empleados values('23555555','Daniel Duarte','Duarte Quiros 345',3);
 insert into empleados values('23666666','Estela Esperanza','España 211',4);

3- Cree un disparador de eliminación sobre la tabla "empleados" que permita borrar varios empleados 
a la vez, pero ningún empleado de la sección "Gerencia".
Se eliminan todos los empleados solicitados en cualquier sentencia "delete", y luego se vuelven a 
insertar aquellos de la sección "Gerencia".

4- Elimine varios registros entre los cuales haya un empleado de "Gerencia".

5- Vea el resultado:
 select *from empleados;
Solamente se eliminaron aquellos que no pertenecen a la sección "Gerencia".
Ver solución

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

 create table secciones(
  codigo int identity,
  nombre varchar(30),
  constraint pk_secciones primary key (codigo)
 ); 

 create table empleados(
  documento char(8) not null,
  nombre varchar(30),
  domicilio varchar(30),
  seccion int not null,
  constraint pk_empleados primary key (documento),
  constraint fk_empleados_seccion foreign key(seccion)
   references secciones (codigo)
 ); 

 insert into secciones values('Secretaria');
 insert into secciones values('Sistemas');
 insert into secciones values('Contaduría');
 insert into secciones values('Gerencia');

 insert into empleados values('22222222','Alejandro Acosta','Avellaneda 90',1);
 insert into empleados values('22333333','Betina Bustos','Bulnes 345',2);
 insert into empleados values('23444444','Camila Costa','Colon 234',1);
 insert into empleados values('23555555','Daniel Duarte','Duarte Quiros 345',3);
 insert into empleados values('23666666','Estela Esperanza','España 211',4);

 create trigger dis_empleados_borrar
 on empleados
 after delete
 as 
  declare @seccion int
  select @seccion=codigo from secciones where nombre='Gerencia'
  declare @borrados int
  select @borrados= count(*)from deleted
  declare @insertados int
  select @insertados=count(*)from inserted
  if exists (select *from deleted where seccion=@seccion)
  begin
   insert into empleados select documento,nombre,domicilio,seccion from deleted
   where deleted.seccion=@seccion
   select @insertados=count(*)from inserted
  end;

 delete empleados where documento like '23%';

 select *from empleados;



 

Retornar