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
Preguntas generadas con IA a partir del documento: comprueba las respuestas con el texto.