Procedimiento almacenado en SQL Server: contar prácticas de un monitor entre dos fechas y triggers de borrado y actualización
Procedimiento almacenado: prácticas de un monitor entre dos fechas
Procedimiento con DNI de monitor y dos fechas. Comprueba y valida los datos, y muestra cuántas prácticas ha realizado el monitor entre esas dos fechas.
ALTER PROCEDURE PROC_1 @PE_DNI VARCHAR(10), @PE_FECHA1 DATE, @PE_FECHA2 DATE
AS
DECLARE @VAR_TOTAL INT
DECLARE @VAR_COD_MON INT
IF (@PE_DNI = '' OR @PE_FECHA1 = '' OR @PE_FECHA2 = '')
BEGIN
PRINT 'CAMPOS INCOMPLETOS'
END
ELSE
BEGIN
IF (@PE_DNI NOT IN (SELECT DNI FROM MONITOR))
BEGIN
PRINT 'MONITOR NO ENCONTRADO'
END
ELSE
BEGIN
IF (@PE_FECHA1 >= @PE_FECHA2)
BEGIN
PRINT 'LA SEGUNDA FECHA NO PUEDE SER MENOR O IGUAL A LA PRIMERA'
END
ELSE IF (@PE_FECHA1 < @PE_FECHA2)
BEGIN
SELECT @VAR_COD_MON = COD_MON
FROM MONITOR
WHERE DNI = @PE_DNI
SELECT @VAR_TOTAL = COUNT(P.COD_A)
FROM ALUMNO A INNER JOIN PRACTICA P ON A.COD_A = P.COD_A
WHERE A.COD_MON = @VAR_COD_MON AND FECHA_PRAC BETWEEN @PE_FECHA1 AND @PE_FECHA2
PRINT @VAR_TOTAL
END
END
END
EXEC PROC_1 '11111111', '2012-02-02', '2012-02-03'
Trigger: restar 75 km al coche al borrar una práctica
Trigger para que, al borrar una práctica, se resten 75 km al coche asignado al monitor.
ALTER TRIGGER EJ3 ON PRACTICA FOR DELETE
AS
DECLARE @COD_A INT
DECLARE @COD_M INT
SELECT @COD_A = A.COD_A
FROM ALUMNO A INNER JOIN DELETED D ON A.COD_A = D.COD_A
SELECT @COD_M = M.COD_MON
FROM MONITOR M INNER JOIN ALUMNO A ON M.COD_MON = A.COD_MON
WHERE A.COD_A = @COD_A
UPDATE COCHE
SET KMS -= 75
WHERE COD_COCHE LIKE (SELECT COD_COCHE FROM MONITOR WHERE COD_MON LIKE @COD_M)
DELETE FROM PRACTICA
WHERE FECHA_PRAC LIKE '2012-05-24'
Trigger: UPDATE de monitor con coche ya asignado
Trigger para el UPDATE de monitor: si el coche que se le asigna ya está asignado a otro monitor, deshacer la operación.
ALTER TRIGGER EJ3 ON PRACTICA FOR DELETE
AS
DECLARE @COD_A INT
DECLARE @COD_M INT
SELECT @COD_A = A.COD_A
FROM ALUMNO A INNER JOIN DELETED D ON A.COD_A = D.COD_A
SELECT @COD_M = M.COD_MON
FROM MONITOR M INNER JOIN ALUMNO A ON M.COD_MON = A.COD_MON
WHERE A.COD_A = @COD_A
UPDATE COCHE
SET KMS -= 75
WHERE COD_COCHE LIKE (SELECT COD_COCHE FROM MONITOR WHERE COD_MON LIKE @COD_M)
DELETE FROM PRACTICA
WHERE FECHA_PRAC LIKE '2012-05-24'