fbpx

En una nota pasada hablamos sobre los procedimientos almacenados que se pueden usar en SQL, pueden revisar la información aquí antes de leer esta nota para tener una mejor idea de lo que se explicará.

En esta ocasión explicaremos el uso de los triggers, también conocidos como disparadores o desencadenadores, estos son un tipo de procedimiento almacenado especial que se ejecuta de manera automática cuando sucede un evento específico en el servidor de base de datos.

Existen 3 distintas categorías de triggers:

  • Trigger DML: se ejecutan cuando un usuario  intenta modificar datos mediante un evento de lenguaje de manipulación de datos (DML). Estos eventos son instrucciones INSERT, UPDATE o DELETE de una tabla o vista.
  • Trigger DDL:  se ejecutan en respuesta a una variedad de eventos de lenguaje de definición de datos (DDL). Estos corresponden principalmente a instrucciones CREATE, ALTER y DROP de Transact-SQL, y a determinados procedimientos almacenados del sistema que ejecutan operaciones de tipo DDL.
  • Trigger Logon:  se activan en respuesta al evento LOGON que se genera cuando se establece la sesión de un usuario.

En pocas palabras, un trigger es diseñado para comprobar o cambiar los datos con base en una instrucción de modificación o definición de datos; no debe devolver datos al usuario por lo que se aconseja no incluir en un trigger instrucciones SELECT que devuelven resultados ni las instrucciones que realizan una asignación variable.

Triggers en SQL

Creación de triggers

La estructura de la instrucción para la creación de un trigger es como sigue:

 CREATE TRIGGER  NombreTrigger ON {tabla | vista } [,...n] ]
      {FOR|AFTER|INSTEAD OF} {[INSERT][,][UPDATE][,][DELETE]} 
      AS sentencia_sql  [;] [,...n ] 

 

Colocamos la sentencia para crear el trigger CREATE TRIGGER seguido del nombre que queramos y señalamos la tabla o vista en la que será aplicable. Esta sentencia debe ser la primera en el lote a ejecutar.

Siguiendo eso se debe colocar el tipo de instrucción de modificación que activará el trigger ya sea INSERT, DELETE, UPDATE o combinaciones de estas.


AFTER
indica que el trigger sólo se activa cuando todas las operaciones especificadas en la instrucción SQL desencadenadora se han ejecutado correctamente.

INSTEAD OF indica que se ejecuta el trigger en vez de la instrucción SQL que provocó su activación, por lo que se suplantan las acciones de las instrucciones desencadenadoras.

Las siguientes instrucciones Transact-SQL no están permitidas en un desencadenador DML:

ALTER DATABASE, CREATE DATABASE, DROP DATABASE.

 

Con esto, veamos un ejemplo concreto de un trigger:

CREATE TRIGGER trVentaD ON VentaD FOR INSERT

AS

BEGIN

DECLARE @Cantidad INT

SELECT @Cantidad=Cantidad FROM INSERTED

    IF @Cantidad < 2

    BEGIN

          PRINT 'La cantidad mínima de venta son 2 artículos'

          ROLLBACK TRANSACTION

 END

END

 

Dicho trigger se ejecuta en caso de que una venta se lleve a cabo que cuente con menos de 2 artículos en cantidad. Por ejemplo, la siguiente instrucción activaría nuestro trigger:

INSERT INTO VentaD (ID,Articulo,Cantidad,Precio,Impuestos)

VALUES(46827, 'MG-11/2CF', 1, 450.00, 45.00)

 

Ahora bien, se debe saber que si se desea modificar el contenido de un trigger, se puede hacer mediante la sentencia ALTER TRIGGER, sin embargo, si se quiere cambiar el nombre deberá eliminarse primero y volverse a crear, para eliminarlo es necesario usar DROP TRIGGER.


Deshabilitar y habilitar un Trigger

En ocasiones puede ser útil inhabilitar temporalmente un desencadenador sin que por ello suponga eliminarlo, para estos casos podemos utilizar la sentencia DISABLE TRIGGER.

Por ejemplo, para deshabilitar el trigger del ejemplo anterior sería como sigue:

DISABLE TRIGGER trVentaD ON VentaD

 

Además, si queremos deshabilitar todos los triggers en una base de datos es posible con la siguiente sentencia:

DISABLE TRIGGER ALL ON DATABASE

 

Ahora bien, para poder revertir lo que hemos hecho, basta con utilizar ENABLE TRIGGER de la siguiente manera:

ENABLE TRIGGER trVentaD ON VentaD

 

De la misma forma podemos habilitar todos los trigger en una base de datos así:

ENABLE TRIGGER ALL ON DATABASE

 


Eliminar un trigger

Como se había mencionado con anterioridad, si se necesita eliminar un trigger de manera permanente, se debe usar una sentencia DROP TRIGGER.

Siguiendo con nuestro ejemplo inicial, la manera de eliminarlo sería como sigue:

DROP TRIGGER trVentaD

 

Estas son las bases que se deben saber al momento de utilizar triggers en SQL, estos pueden llegar a ser muy útiles, sobretodo si su base de datos tiene mucha actividad sensible respecto a insertar, eliminar y actualizar registros ya que se pueden utilizar como validaciones como el ejemplo que manejamos en esta nota.

Desde algo tan simple como eso, hasta un trigger verificador que nos permita identificar si, por ejemplo, un registro de un correo electrónico es válido basándonos en su formato (que tenga el símbolo “@”, que tenga al menos un carácter “.”, etc.).

Por lo que el límite es solo el ingenio que el programador pueda tener, ya que estos procedimientos almacenados tan especiales pueden ser usados de muchas maneras.

Espero les sea de utilidad, experimenten que tan lejos pueden llegar con los triggers y si tienen alguna duda o cualquier comentario sobre el tema, podemos hablar de ello en la sección de los comentarios.

¡Nos leemos hasta la otra!


Referencias

sorayagami02
Soy una chica gamer que últimamente pasa demasiado tiempo dejando los juegos a medias... !eso no es bueno, eh! Leo fanfics a todas horas del día y tengo fandoms a morir así que, sí, soy toda una fangirl.

Deja un comentario

A %d blogueros les gusta esto: