Un trigger es una clase especial de procedimiento almacenado que se ejecuta automáticamente cuando se produce un evento en el servidor de bases de datos. Los trigger se ejecutan cuando un usuario intenta modificar datos mediante un evento de lenguaje de
manipulación de datos (DML). Los eventos DML son instrucciones INSERT, UPDATE o DELETE de una tabla o vista. Estos triggers se activan cuando se desencadena cualquier evento válido, con independencia de que las filas de la tabla se vean o no afectadas.
La sentencia que se utiliza para añadir triggers al esquema de base de datos es CREATE TRIGGER.
La sintaxis general de un trigger es la siguiente:
CREATE TRIGGER <Schema_Name, sysname, Schema_Name>.<Trigger_Name, sysname, Trigger_Name>
ON <Schema_Name, sysname, Schema_Name>.<Table_Name, sysname, Table_Name>
AFTER <Data_Modification_Statements, , INSERT,DELETE,UPDATE>
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for trigger here
END
Los triggers utilizan dos tablas virtuales denominadas inserted y deleted. SQL Server crea y administra automáticamente ambas tablas. La estructura de las tablas inserted y deleted es la misma que tiene la tabla que ha desencadenado la ejecución del trigger.
La tabla virtual Inserted solo está disponible en las operaciones INSERT y UPDATE y en ella están los valores resultantes después de la inserción o actualización.
La tabla Deleted está disponible en las operaciones UPDATE y DELETE, los valores que tiene esta tabla son los anteriores a la ejecución de la actualización o borrado. Es decir, los datos que serán borrados.
No existe una tabla Updated ya que la actualización reside en Deleted e Inserted.
Enseguida veremos un ejemplo de cómo crear triggers en SQL.
- Abrimos el Microsofr SQL Server Management Studio
- Vamos a nuestra base de datos y extendemos el árbol hasta la tabla que queremos agregar el trigger.
- En la carpeta Triggers damos botón derecho de nuestro mouse y damos clic en “New Trigger.
- Se abrirá una pestaña con la estructura básica de un Trigger y lo modificamos de acuerdo a nuestras necesidades. En el siguiente ejemplo puedes ver cada una de las instrucciones comentadas para que puedas ver que es lo que hace.
--Crea un trigger llamado AddCines
CREATE TRIGGER AddCines
--Se ejecutara en la tabla Cinemex_Ciudades
ON Cinemex_Ciudades
--Se ejecutara despues de un Insert o un Update a la tabla
AFTER INSERT,UPDATE
AS
BEGIN
-- SET NOCOUNT ON impide que se generen mensajes de texto con cada instrucción
SET NOCOUNT ON;
-- Se crea un Insert: cuando se inserten valores en la tabla Cinemex_Ciudades, el trigger insertara un registro en la tabla Cinemex_Cines
INSERT INTO Cinemex_Cines
(ID, IDCiudad, Cine, Direccion)
SELECT '500', ID, 'Cinemex ' + Ciudad, 'Prueba'
FROM INSERTED
--Los valores que se insertaran, seran los que esten almacenados en la tabla virtual Inserted
END
GO
Dejanos tus comentarios, dudas o sugerencias y pronto te responderemos.