SQL Server 2012: los desencadenadores INSERT

Autor: Javier Rubio Ochoa

Descarga en este enlace el archivo de texto con los ejemplos que veremos a continuación.    Ejemplos

Este tipo de desencadenadores se usan para modificar, o deshabilitar un registro que se está insertando. También se utilizan para llevar a cabo una serie de cambios en cadena en otras tablas.

Por ejemplo: podríamos guardar en una tabla quién almacena y en qué fecha y hora un registro en una determinada tabla.

Un desencadenador INSERT se activa o se ejecuta en el momento en que alguien trata de insertar un nuevo registro en una tabla mediante la instrucción INSERT. Cuando esto se produce SQL Server copia el nuevo registro en una tabla de la base de datos conocida como tabla de desencadenadores y en otra tabla especial que se almacena en memoria denominada tabla inserted. Por lo tanto, el nuevo registro que tratamos de añadir se encuentra a su vez en dos tablas (desencadenadores e inserted) antes de ser añadido en la tabla de destino.

La tabla inserted se utiliza para llevar a cabo los cambios en cascada en otras tablas.

Vamos a situarnos en la base de datos "Ventas" que hemos creado en este mismo curso. Cuando realizamos o cerramos una venta de un determinado producto la cantidad de stock en el almacén de este producto debería actualizarse.

Para llevar a cabo esta actualización tenemos dos opciones. La primera es recoger en una variable la cantidad de ese producto que se ha vendido para realizar la actualización en la tabla "Almacen". Por lo tanto, llevamos hasta tres diferentes tareas:

1

Insertar el registro en la tabla ventas.

2

Recoger la cantidad del producto vendida.

3

Actualizar el registro de ese producto restando la cantidad vendida en su almacén.

Descarga en este enlace el archivo de texto con los ejemplos que veremos a continuación: Ejemplos

La otra opción que tenemos es utilizar la tabla inserted los detalles de la venta que se trata de añadir y aplicar los cambios en en la tabla "Almacen" en un desencadenador.

Vamos a llevar a la práctica este ejemplo.

 

Para poder comprobarlo necesitamos añadir una serie de registros en la tablas de la base de datos "Ventas".

En la base de datos "Ventas" abrimos una nueva consulta para escribir el código que añade un grupo de registros en la tabla "Almacen".

 

Añadimos otro grupo de registros para la tabla "Empleados".

 

Y por último añadimos un par de clientes en la tabla "Clientes".

 

Una vez que tenemos rellenadas con algo de información nuestras tablas, vamos a ver el proceso de creación del desencadenador.

 

Se nos muestra una nueva ventana con la plantilla para crear desencadenadores:

 
Escribimos el código de nuestro desencadenador de tipo INSERT, indicando la tabla en la que se va a crear (Ventas_Cli) y la sentencia UPDATE que actualiza la tabla Almacen restando el valor cantidad de la venta realizada:

Desencadenadores INSERT
 

Al pulsar en ejecutar el nuevo procedimiento almacenado es creado y almacenado en la carpeta desencadenadores:

 
Vamos a mostrar los valores que tenemos en la tabla Almacen antes de insertar la venta. A continuación, insertamos una venta de 50 monitores y volvemos a mostrar los registros de la tabla Almacen una vez insertada esa venta:

Desencadenadores INSERT - 2
 

Ejecutamos esta sentencia SQL y el resultado nos muestra que efectivamente el desencadenado a restado las unidades de monitores vendidas.

Desencadenadores INSERT
 

Esta píldora formativa está extraída del Curso online de Introducción a SQL Server 2012.

¿Te gusta el contenido de esta píldora de conocimiento?

No pierdas tu oportunidad y ¡continúa aprendiendo!

Política de privacidad

ADR Formación utiliza cookies propias y de terceros para fines analíticos anónimos, guardar las preferencias que selecciones y para el funcionamiento general de la página.

Puedes aceptar todas las cookies pulsando el botón "Aceptar" o configurarlas o rechazar su uso pulsando el botón "Configurar".

Puedes obtener más información y volver a configurar tus preferencias en cualquier momento en la Política de cookies