miércoles, 10 de diciembre de 2014

Crear una Sumatoria en un Trigger (Disparador :: Sum)


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