Crear un trigger en SQL Server
Índice
Que es un Trigger en SQL Server
Como crear un Trigger en SQL Server
Ejemplo de Trigger INSERT INTO en SQL Server
Ejemplo de Trigger UPDATE en SQL Server
Ejemplo de Trigger DELETE en SQL Server
Ejemplo de Trigger Instead Of y After en SQL Server
Habilitar, Deshabilitar y Eliminar un Trigger en SQL Server
Que es un Trigger en SQL Server
Los Triggers en su estructura utilizan
dos tablas virtuales la primera denominada Inserted y la segunda Deleted. Sql Server
Management Studio administra automáticamente dichas tablas. La estructura de la
tabla inserted y deleted es igual a la tabla que provocado la ejecución del Trigger.
Los triggers se ejecutan luego de
haberse ejecutado una sentencia “INSERT”,” UPDATE” o “DELETE” en la tabla para
la que fueron creados. Por otro lado, las restricciones comprueban con
anterioridad la ejecución de una sentencia “Insert”, “update” o “Delete”. Por lo
tanto, si se comprueba que una restricción no es válida el desencadenador no se
ejecuta.
Como crear un Trigger en SQL Server
CREATE TRIGGER NOMBRE_TRIGGER ON NOMBRE_TABLA FOR INSERT AS SENTENCIAS
A continuación vamos a explicar la sintaxis básica:
CREATE TRIGGER: Es la instrucción que nos indica que vamos a crear un disparador.
NOMBRE_TRIGGER: Es el nombre que definimos para el disparador.
ON NOMBRE_TABLA: Acá indicamos para que tabla estará definido el Trigger.
FOR INSERT: Indicamos la acción o evento que hará que el Trigger se ejecute, la cual puede ser un Insert, Update o Delete.
AS: Indicamos el inicio de la sentencia a ejecutarse.
SENTENCIAS: Acá indicamos el bloque de sentencias a ejecutarse en el disparador.
Un
desencadenador puede modificarse, de igual forma también podemos desactivarlo si no necesitamos
que se ejecute y de igual manera volverlo activar cuando sea necesario.
En el caso
de correcciones de un Trigger el proceso más habitual es eliminar el Trigger y
volverlo a crear mediante la instrucción CREATE TRIGGER. pero como mencionábamos podemos modificarlos y para eso podemos hacer unos de la siguiente instrucción:
ALTER TRIGGER NOMBRE_TRIGGER
Para eliminar
un Trigger mediante Transact-SQL debemos utilizar la siguiente instrucción:
DROP TRIGGER
NOMBRE_TRIGGER
En el caso de necesitar desactivar y activar un Trigger debemos utilizar
las siguientes instrucciones:
DISABLE TRIGGER: Para desactivar un trigger.
ENABLE TRIGGER: Para volver a habilitar un trigger.
En los uso y creación de Trigger existen algunas instrucciones que no está permitidas, a continuación, haremos mención:
- CREATE DATABASE
- ALTER DATABASE
- DROP DATABASE
- LOAD DATABASE
- RESTORE DATABASE
- DISK RESIZE
- DISK INIT
- RESTORE LOG, ETC.
Como
último punto antes de pasar a los ejemplos debemos hacer mención que
también podemos definir en qué momento se va ejecutar el desencadenador,
es decir indicar al momento del disparo la accion a realizar del Trigger(sentencia)
y posterior ejecutar las accion la cual puede ser un Insert, Update o Delete.
Para
especificar el disparo del Trigger podemos hacer uso de la palabra After (Después)
o Instead of (en lugar) para determinar en qué momento ejecutar el trigger.
De
no especificar el momento de disparo del Trigger al momento de crearlo, este
por defecto será establecido con la palabra “after”.es decir se va ejecutar
luego del suceso disparado.
Los disparadores declarados como “Instead of” cancelan
las acciones del Trigger, sustituyendolas por otras acciones(sentencias).
A continuación vamos a mostrar la sintaxis para especificar el disparo de un trigger:
CREATE TRIGGER NOMBRE_TRIGGER ON NOMBRE_TABLA o VISTA MOMENTO DISPARO TRIGGER-- AFTER o INSTEAD OF ACCION(Sentecia)-- INSERT, UPDATE o DELETE AS SENTENCIAS
A continuación vamos a realizar una serie de ejemplos de como crear Triggers.
Ejemplo de Trigger INSERT INTO en SQL Server
CREATE TRIGGER INSERTAR_AUTOS ON AutosVentas FOR INSERT AS DECLARE @EXISTENCIAS INT SELECT @EXISTENCIAS = Existencias FROM Autos JOIN inserted ON inserted.AutoID = Autos.Codigo WHERE Autos.Codigo = inserted.AutoID --VALIDAMOS LA EXISTENCIAS DE AUTOS IF(@EXISTENCIAS>=(SELECT Cantidad FROM inserted)) UPDATE Autos SET Existencias = Existencias-inserted.Cantidad FROM Autos JOIN inserted ON inserted.AutoID = Autos.Codigo WHERE Codigo = inserted.AutoID ELSE BEGIN RAISERROR('La cantidad de autos en existencias no coinciden con los establecidos para la venta', 16,1) ROLLBACK TRANSACTION END
Ahora vamos a crear el Trigger en SQL Server Management Studio para poder probarlo.
Ejemplo de Trigger UPDATE en SQL Server
Al inicio del artículo mencionamos que los trigger poseen 2 tablas virtuales para ejecutar las sentencias. En el caso de un trigger de actualización tiene una tabla virtual donde se almacenan los registros que serán actualizados (Tabla Virtual DELETE) y una tabla donde se almacenan los registros que actualizarán los registros anteriores (tabla virtual UPDATE).
Para el ejemplo vamos a crear un trigger que evite la modificación de los registros del campo Precio de la tabla “Autos”.
CREATE TRIGGER ACTUALIZARPRECIO ON Autos FOR UPDATE AS IF UPDATE(Precio) BEGIN RAISERROR('EL PRECIO DE UN AUTO NO PUEDE MODIFICARASE',10,1) ROLLBACK TRANSACTION END;
Ahora vamos a crear el Trigger en Sql server Managemet Studio:
El trigger que hemos elaborado va a evitar que editemos el precio de un auto, de la siguiente tabla que almacena los registros de autos tratemos de editar el precio del auto con nombre "Mustang".
Ahora vamos a crear otro ejemplo en cual el trigger creado nos permita modificar los campos Nombre y Marca de un auto pero que no permita la modificación del precio de dicho auto y por último nos muestre un mensaje si se modificaron los registros.
CREATE TRIGGER ACTUALIZARCAMPOS_AUTOS ON Autos FOR UPDATE AS IF(UPDATE(Marca) OR UPDATE(Año)) AND NOT (UPDATE(Precio)) BEGIN SELECT INS.Nombre+' | '+INS.Marca AS NUEVA_ACTUALIZACION FROM deleted AS DL JOIN inserted AS INS ON DL.Codigo = INS.Codigo END ELSE BEGIN RAISERROR('El precio y stock no pueden modificarse. La actualización no se realizó.', 10, 1) ROLLBACK TRANSACTION END GO
Creemos el trigger en Management Studio de SQL y posterior ejecutemos un Update para validar el resultado:
Ejemplo de Trigger DELETE en SQL Server
CREATE TRIGGER ELIMINARVENTAS_AUTOS ON AutosVentas FOR DELETE AS UPDATE Autos SET Existencias = Autos.Existencias+deleted.Cantidad FROM Autos JOIN deleted ON deleted.AutoID = Autos.Codigo GO
Ahora vayamos a SQL Server Management Studio, peguemos el código para crear el trigger y realicemos una prueba eliminando los registros de ventas.
Ahora vamos a realizar una prueba eliminando los registros de la tabla "AutosVentas". Realizamos un select para verificar el estado de los registros previo a la ejecución de la Sentencia DELETE.
Si observamos en la tabla "AutosVentas" podemos ver que hay registros. entonces la cantidad que aparece que son 2 al eliminar los registros de la venta se tendrán que cargar al ID de auto correspondiente que en este caso el de nombre "Audi V8".
Los registros han sido eliminados. verifiquemos con un SELECT si se llevaron a cabo los cambios en las tabla.
Si revisamos efectivamente se han aplicado los cambios en la tabla. En la creación de Trigger de eliminación no se puede hacer uso de la instrucción DROP TABLE.
Ejemplo de Trigger Instead Of y After en SQL Server
A continuación vamos a realizar algunos ejemplos en los que agregaremos registros a la tabla alumnos:
CREATE TRIGGER INSERTAR_REPUESTO_AUTO ON AutosRepuestos INSTEAD OF INSERT AS --INSERTAMOS LOS REGISTROS EN LA TABLA AUTOSREPUESTOS INSERT INTO AutosRepuestos SELECT AutoID,Repuesto,Marca,Año FROM inserted WHERE Marca = 'Toyota' GO
A continuación vamos generar el trigger en SQL Server Management Studio y realizaremos una inserción de registros.
Ahora ejecutemos una sentencia Insert.
Realizamos un SELECT a la tabla "AutosRepuestos", para ver si se registraron los datos.
Habilitar, Deshabilitar y Eliminar un Trigger en SQL Server
DROP TRIGGER NOMBRE_TRIGGER
En el uso de Triggers existe la opción de poder desactivarlo si no necesitamos que este se esté ejecutando y de igual forma también podemos activarlo cuando necesitemos que entre en función sobre la tabla.
Para desactivar un trigger debemos colocarlos sobre nuestra tabla en la opción Triggers seleccionamos el nombre del trigger a desactivar. damos clic derecho y seleccionamos la opción "Disable".
Al final nos mostrará el mensaje de que el trigger ha sido desactivado.
0 Comentarios