Procedimiento almacenado en SQL Server: contar prácticas de un monitor entre dos fechas y triggers de borrado y actualización

Inglés2,78 KB

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'

Descargar

PDF Word HTML