Primer problema:
Una empresa almacena los datos de sus empleados en una tabla denominada "empleados" y los datos de
las distintas sucursales en una tabla "sucursales".
1- Elimine las tablas si existen:
if object_id('empleados') is not null
drop table empleados;
if object_id('sucursales') is not null
drop table sucursales;
2- Cree las tablas, con las siguientes estructuras:
create table sucursales(
codigo int identity,
domicilio varchar(30),
constraint PK_sucursales primary key (codigo)
);
create table empleados(
documento char(8) not null,
nombre varchar(30),
domicilio varchar(30),
sucursal int not null,
constraint PK_empleados primary key (documento),
constraint FK_empleados_sucursal foreign key(sucursal)
references sucursales(codigo)
);
3- Ingrese algunos registros en las dos tablas:
insert into sucursales values ('Colon 123');
insert into sucursales values ('Sucre 234');
insert into sucursales values ('Rivadavia 345');
insert into empleados values ('22222222','Ana Acosta','Avellaneda 1258',1);
insert into empleados values ('23333333','Betina Bustos','Bulnes 345',2);
insert into empleados values ('24444444','Carlos Caseres','Caseros 948',3);
insert into empleados values ('25555555','Fabian Fuentes','Francia 845',1);
insert into empleados values ('26666666','Gustavo Garcia','Guemes 587',2);
insert into empleados values ('27777777','Maria Morales','Maipu 643',3);
4- Cree un disparador de inserción, eliminación y actualización que no permita modificaciones en la
tabla "empleados" si tales modificaciones afectan a empleados de la sucursal de 1.
5- Ingrese un empleado en la sucursal 3.
El trigger se dispara permitiendo la transacción;
6- Intente ingresar un empleado en la sucursal 1.
El trigger se dispara y deshace la transacción.
7- Ejecute un "update" sobre "empleados" que permita la transacción.
8- Ejecute un "update" sobre "empleados" que el trigger deshaga.
9- Elimine un empleado (o varios) que no sean de la sucursal 1.
El trigger se ejecuta y la transacción se realiza.
10- Intente eliminar un empleado (o varios) de la sucursal 1.
El trigger deshace la transacción.
Ver solución
if object_id('empleados') is not null
drop table empleados;
if object_id('sucursales') is not null
drop table sucursales;
create table sucursales(
codigo int identity,
domicilio varchar(30),
constraint PK_sucursales primary key (codigo)
);
create table empleados(
documento char(8) not null,
nombre varchar(30),
domicilio varchar(30),
sucursal int not null,
constraint PK_empleados primary key (documento),
constraint FK_empleados_sucursal foreign key(sucursal)
references sucursales(codigo)
);
insert into sucursales values ('Colon 123');
insert into sucursales values ('Sucre 234');
insert into sucursales values ('Rivadavia 345');
insert into empleados values ('22222222','Ana Acosta','Avellaneda 1258',1);
insert into empleados values ('23333333','Betina Bustos','Bulnes 345',2);
insert into empleados values ('24444444','Carlos Caseres','Caseros 948',3);
insert into empleados values ('25555555','Fabian Fuentes','Francia 845',1);
insert into empleados values ('26666666','Gustavo Garcia','Guemes 587',2);
insert into empleados values ('27777777','Maria Morales','Maipu 643',3);
create trigger dis_empleados
on empleados
for insert,update,delete
as
declare @suc int
if (exists (select *from inserted where sucursal=1)) or
(exists (select *from deleted where sucursal=1))
begin
raiserror('No puede modificar datos de empleados de la sucursal 1', 16, 1)
rollback transaction
end;
insert into empleados values ('30000000','Zulma Zapata','Suiza 258',3);
insert into empleados values ('31111111','Ricardo Rojas','Rivadavia 256',1);
update empleados set domicilio='Avellaneda 234' where documento='23333333';
update empleados set domicilio='Avellaneda 234' where documento='22222222';
delete from empleados where documento='25555555';
delete from empleados where documento='30000000';