Los Trigger son Disparadores que se ejecutan siempre y cuando una instrucción en este caso "update" intenta actualizar campos de una tabla. El siguiente ejemplo explica como declarar una variable dentro de un trigger y como condicionar la actualización a rangos específicos.
* Aspecto
* Criterio
* Factor
* Parámetros
* Oficinas
Problema: Se requiere actualizar la columna Base de la tabla Parametros pero cuando se actualice cada registro no debe superar el rango del NumCriterio asignado de la tabla Criterio, es decir si el numero_criterio de rango es 10 los para metros pertenecientes a este no deben superar 10. ejemplo(parametro1 = 10; parametro2 = 8; parametro3 = 2) como pueden observar en la tabla.
Primero se crea y se nombre el Trigger en la base de datos que se vaya a utilizar.
USE [Pruebas_BD] GO CREATE TRIGGER CondActualizar_CampoBase ON Parametros FOR update AS
Luego se Declaran las variables a utilizar. Recordar que para asignarle un valor a una variable debe ser dentro del select.
/* Declaro variables a usar */ DECLARE @IDCRITERIO AS INT, @BASE AS INT, @NUMCRITERIO AS INT
/* Este select me permite capturar el id del criterio que el parámetro tiene asignado, tambien capturo la base modifidaca (nuevo valor) */ SELECT @IDCRITERIO = T1.[IdCriterio], @BASE = T2.Base FROM [Parametros] T1 -- Valores actuales INNER JOIN INSERTED T2 -- Valores nuevo ON T1.[IdParametro] = T2.IdParametro /* Este select me permite capturar el valor de criterio (Valor máximo permitido en el parámetro) */ SELECT @NUMCRITERIO = T1.[NumCriterio] FROM [Criterio] T1 WHERE T1.[IdCriterio] = @IDCRITERIO -- Es el id del criterio que maneja el parámetro
/* Finalmente compraro el valor nuevo ingresado a la base, con el máximo permitido, si es mayor niego la actualización */ IF(@BASE > @NUMCRITERIO) BEGIN raiserror('No se puede actualizar la base excede el criterio.', 10, 1)-- este mensaje aparece al negar la actualización rollback transaction -- para todas las transacciones END
USE [Pruebas_BD] GO CREATE TRIGGER CondActualizar_CampoBase ON Parametros FOR update AS /* Declaro variables a usar */ DECLARE @IDCRITERIO AS INT, @BASE AS INT, @NUMCRITERIO AS INT /* Este select me permite capturar el id del criterio que el parámetro tiene asignado, tambien capturo la base modifidaca (nuevo valor) */ SELECT @IDCRITERIO = T1.[IdCriterio], @BASE = T2.Base FROM [Parametros] T1 -- Valores actuales INNER JOIN INSERTED T2 -- Valores nuevo ON T1.[IdParametro] = T2.IdParametro /* Este select me permite capturar el valor de criterio (Valor máximo permitido en el parámetro) */ SELECT @NUMCRITERIO = T1.[NumCriterio] FROM [Criterio] T1 WHERE T1.[IdCriterio] = @IDCRITERIO -- Es el id del criterio que maneja el parámetro /* Finalmente compraro el valor nuevo ingresado a la base, con el máximo permitido, si es mayor niego la actualización */ IF(@BASE > @NUMCRITERIO) BEGIN raiserror('No se puede actualizar la base excede el criterio.', 10, 1) rollback transaction END
These are our "PROYECTS"?, u need to fix that. IS "PROJECTS" not "PROYECTS"
ResponderEliminarsorry, but i will correct this mistake in my home because i am traveling.
ResponderEliminar