Un disparador es un objeto con nombre dentro de una base de datos el cual se asocia con una tabla y se activa cuando ocurre en ésta un evento en particular. Por ejemplo el siguiente Trigger crea la sumatoria de un rango de los valores de un campo y lo coloca dentro de una variable @SUMA; al momento de crearse el trigger la sumatoria dentro de la variable se va actualizando cada vez que se inserte un nuevo valor. Luego se condiciona, que si, el valor insertado es en este caso > 100 el disparador se activa impidiendo que se ejecute esta acción de actualización.
Para que el Trigger acepte la sumatoria de una columna o de un campo debe declararse primero en una variable dentro del select de esta forma.
SELECT @SUMA = (SELECT SUM([RangoFactor]) AS SUMATORIA
FROM
[Criterio] T1
WHERE
T1.[IdAspecto] = @IDASPECTO)
La variable @SUMA debe estar declarada al inicio del Trigger y se llama al momento de hacer la condición en el IF.
USE [Pruebas_BD]
GO
alter TRIGGER ActualizarSuma ON Criterio FOR update
AS
---Declaro variables a usar
DECLARE
@RANGOFACTOR AS INT,
@SUMA AS INT
SELECT
@RANGOFACTOR = T2.[RangoFactor] --asigno el valor nuevo
FROM
[Criterio] T1
INNER JOIN
INSERTED T2
ON T1.[IdCriterio] = T2.[IdCriterio]
/*Este select llama la sumatoria de rangofactor de aspectos en una variable para utilizarla en la condición*/
SELECT @SUMA = (SELECT SUM([RangoFactor]) AS SUMATORIA
FROM
[Criterio] T1
WHERE
T1.[IdAspecto] = @IDASPECTO)
/* Finalmente digo que si la sumatoria es mayor a 100 niego la actualización */
IF ( @SUMA > 100)
BEGIN
raiserror('No se puede actualizar el rangofactor excede la sumatoria permitido.', 10, 1)
rollback transaction
END
No hay comentarios:
Publicar un comentario