Una empresa almacena los datos de sus empleados en una tabla denominada "empleados" y en otra tabla llamada "secciones", el código de la sección y el sueldo máximo de cada una de ellas. 1- Elimine las tablas si existen: if objectid!empleados# is not null drop table empleados$ if objectid!secciones# is not null drop table secciones$
%- &ree las tablas, con las siguientes estructuras: create table secciones! codigo int identity, nombre 'arc(ar!)*#, sueldomaximo decimal!+,%#, constraint secciones primary ey!codigo# #$
create table empleados! documento c(ar!+# not null, nombre 'arc(ar!)*# not null, domicilio 'arc(ar!)*#, codigoseccion int not null, sueldo decimal!+,%#, constraint empleados primary ey!documento#, ey!documento#, constraint /empeladosseccion foreign ey !codigoseccion# references secciones!codigo#
#$
)- 0ngrese algunos registros en ambas tablas: insert into secciones 'alues!dministracion,12**#$ insert into secciones 'alues!3istemas,%***#$ insert into secciones 'alues!3ecretaria,1***#$
insert into empleados 'alues!%%%%%%%%,na costa,'ellaneda ++,1,11**#$ insert into empleados 'alues!%))))))),4ernardo 4ustos,4ulnes )52,1,1%**#$ insert into empleados 'alues!%5555555,&arlos &aseres,&olon 675,%,1+**#$ insert into empleados 'alues!%2222222,8iana 8uarte,&olon +7),),1***#$
5- &ree un disparador para 9ue se ejecute cada 'e 9ue una instrucción "insert" ingrese datos en "empleados"$ el mismo debe 'eri;car 9ue el sueldo del empleado no sea mayor al sueldo máximo establecido para la sección, si lo es, debe mostrar un mensaje indicando tal situación y des(acer la transacción.
2- 0ngrese un nue'o registro en "empleados" cuyo sueldo sea menor o igual al establecido para la sección.
6-
7- 0ntente ingresar un nue'o registro en "empleados" cuyo sueldo sea mayor al establecido para la sección. El disparador se ejecutó mostrando un mensaje y la transacción se des(io.
+-
>- 0ntente ingresar un empleado con código de sección inexistente. parece un mensaje de error por9ue se 'iola la restricción "foreign ey"$ el trigger no llegó a ejecutarse.
3?@U&0?A
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), sueldomaximo decimal(,!), constraint "#_secciones primary $ey(codigo) ); create table empleados( documento char() not null, nombre varchar(30) not null, domicilio varchar(30), codigoseccion int not null, sueldo decimal(,!), constraint "#_empleados primary $ey(documento), constraint %#_empelados_seccion foreign $ey (codigoseccion) references secciones(codigo) );
insert into secciones values('&dministracion',00); insert into secciones values('istemas',!000); insert into secciones values('ecretaria',000); insert into insert into insert into insert into
empleados values('!!!!!!!!','&na &costa','&vellaneda ',,00); empleados values('!3333333','*ernardo *ustos','*ulnes 3+',,!00); empleados values('!+++++++','arlos aseres','olon -.+',!,00); empleados values('!','/iana /uarte','olon .3',3,000);
create trigger dis_empleados_insertar on empleados for insert as declare maximo decimal(,!) set maximo1(select sueldomaximo from secciones join inserted on inserted2codigoseccion1secciones2codigo) if (maximo(select sueldo from inserted)) begin declare mensaje varchar(+0) set mensaje1'4l sueldo debe ser menor a '5cast(maximo as char()) raiserror(mensaje, -, ) rollbac$ transaction end; insert into empleados values('!-------','%ederico %uentes','%rancia 63',!,000); select 7from empleados; insert into empleados values('!.......','8aston 8arcia','8uemes 3--',3,!00); select 7from empleados; insert into empleados values('!.......','8aston 8arcia','8uemes 3--',6,!00);