Triggers en SQL Server: ejemplos de creación, deshabilitación y registro de cambios

Clasificado en Informática y Telecomunicaciones

Escrito el en español con un tamaño de 3,11 KB
Actualizado el

Resumen

El documento presenta ejemplos prácticos de triggers en SQL Server para automatizar tareas y responder a eventos sobre las tablas. Muestra cómo crear triggers de INSERT, UPDATE y INSTEAD OF DELETE, cómo deshabilitarlos y cómo registrar los cambios en otra tabla usando las tablas inserted y deleted. Al final, incluye un ejemplo completo de inserción y actualización sobre la tabla Empleado.

Puntos clave

  • Un trigger es un objeto que se ejecuta automáticamente ante eventos como INSERT, UPDATE o DELETE sobre una tabla.
  • CREATE TRIGGER ... FOR INSERT se activa al insertar registros en la tabla indicada.
  • ALTER TABLE ... DISABLE TRIGGER desactiva un trigger sin eliminarlo.
  • INSTEAD OF DELETE reemplaza la acción de borrado por la lógica definida en el trigger.
  • Las tablas virtuales DELETED e INSERTED guardan los valores antiguos y nuevos de las filas afectadas.
  • SUSER_SNAME() devuelve el nombre del usuario de inicio de sesión y GETDATE() la fecha y hora actuales.

Resumen generado con IA a partir del documento. Ponte a prueba

Ejemplos de Triggers en SQL Server

Este documento presenta ejemplos de cómo implementar triggers en SQL Server. Los triggers son útiles para automatizar tareas y responder a eventos específicos en la base de datos.

Creación de Triggers

A continuación, se muestran ejemplos de cómo crear triggers para diferentes escenarios:

Ejemplo 1: Trigger para Inserción de Usuario

Este trigger muestra un mensaje cuando se inserta un nuevo registro en la tabla 'Usuario'.

```sql CREATE TRIGGER TR7_E1_2 ON Usuario FOR INSERT AS PRINT 'Se ingresó un usuario' ```

Ejemplo 2: Deshabilitar Trigger

Este ejemplo muestra cómo deshabilitar un trigger.

```sql ALTER TABLE Usuario DISABLE TRIGGER TR7_E1_2 ```

Ejemplo 3: Trigger para Actualización de Usuario

Este trigger muestra un mensaje cuando se actualiza un registro en la tabla 'Usuario'.

```sql CREATE TRIGGER TR7_E1_5 ON Usuario FOR UPDATE AS PRINT 'Se modificó un usuario' ```

Ejemplo 4: Trigger para Eliminar Registro (en lugar de eliminar)

Este trigger muestra un mensaje en lugar de eliminar un registro de la tabla 'Usuario'.

```sql CREATE TRIGGER TR7_E1_8 ON Usuario INSTEAD OF DELETE AS PRINT 'Se eliminó un registro' ```

Ejemplo 5: Trigger para Registrar Inserciones en Otra Tabla

Este trigger inserta el usuario y la fecha en una nueva tabla cuando se inserta un registro en la tabla 'Empleado'.

```sql CREATE TABLE Empleado_Info( Usuario varchar(60), Fecha datetime )

CREATE TRIGGER TR7_E2_2 ON Empleado FOR INSERT AS INSERT INTO Empleado_Info VALUES (SUSER_SNAME(), GETDATE()) ```

Ejemplo 6: Trigger para Registrar Cambios en la Tabla 'Empleado'

Este trigger guarda los cambios realizados en la tabla 'Empleado' en la tabla 'Empleado_Log'.

```sql CREATE TABLE Empleado_Log( Descripcion varchar(200) )

CREATE TRIGGER TR7_E2_3 ON Empleado FOR UPDATE AS DECLARE @Descripcion varchar(200) SET @Descripcion = 'Se modificó el valor de'

IF UPDATE(Id_Empleado) SELECT @Descripcion = @Descripcion + ' Id_Empleado = ' + CAST(D.Id_Empleado as VARCHAR(10)) + ' a Id_Empleado = ' + CAST(I.Id_Empleado as VARCHAR(10)) FROM DELETED AS D, INSERTED AS I

IF UPDATE(Nombre) SELECT @Descripcion = @Descripcion +' Nombre = ' + D.Nombre + ' a Nombre = ' + I.Nombre FROM DELETED AS D, INSERTED AS I

IF UPDATE(Departamento) SELECT @Descripcion = @Descripcion + ' Departamento = ' + D.Departamento + ' a Departamento = ' + I.Departamento FROM DELETED AS D, INSERTED AS I

IF UPDATE(Sueldo) SELECT @Descripcion = @Descripcion + ' Sueldo = $' + CAST(D.Sueldo as VARCHAR(10)) + ' a Sueldo = $' + CAST(I.Sueldo AS VARCHAR(10)) FROM DELETED AS D, INSERTED AS I

INSERT INTO Empleado_Log VALUES (@Descripcion) ```

Ejemplo 7: Inserción y Actualización de Datos

Este ejemplo muestra cómo insertar y actualizar datos en la tabla 'Empleado'.

```sql INSERT INTO Empleado VALUES (1, 'Daniel', 'Desarrollo Web', 100000.00) UPDATE Empleado SET Sueldo = 200000.00, Id_Empleado = 11 WHERE Id_Empleado = 1 SELECT*FROM Empleado SELECT*FROM Empleado_Log ```

Preguntas frecuentes

¿Cómo se desactiva un trigger en SQL Server?

Se usa ALTER TABLE seguido del nombre de la tabla y la instrucción DISABLE TRIGGER con el nombre del trigger. Por ejemplo: ALTER TABLE Usuario DISABLE TRIGGER TR7_E1_2.

¿Qué hace un trigger INSTEAD OF DELETE?

Sustituye la operación de borrado por el código del trigger. En el ejemplo, en lugar de eliminar el registro solo se muestra un mensaje con PRINT.

¿Para qué sirven las tablas DELETED e INSERTED?

Permiten consultar los valores de las filas antes (DELETED) y después (INSERTED) de una actualización, y se usan para registrar o comparar cambios.

Ponte a prueba

Tarjetas de repaso

Pulsa una tarjeta para ver la respuesta.

Test

1. ¿Qué instrucción se usa para crear un trigger que se active al insertar datos?
2. ¿Qué hace la instrucción ALTER TABLE Usuario DISABLE TRIGGER TR7_E1_2?
3. ¿Qué devuelve la función SUSER_SNAME() en el trigger del ejemplo 5?
4. ¿Qué efecto tiene un trigger INSTEAD OF DELETE?
5. ¿Qué tablas virtuales se usan en el trigger TR7_E2_3 para comparar valores antiguos y nuevos?
6. ¿En qué tabla guarda sus registros el trigger TR7_E2_3?

Preguntas generadas con IA a partir del documento: comprueba las respuestas con el texto.