0% encontró este documento útil (0 votos)
3 vistas9 páginas

Triggers SQL Server

El documento proporciona una guía completa sobre triggers en SQL Server, incluyendo su definición, tipos (DML AFTER, INSTEAD OF, DDL, y LOGON), y ejemplos de uso. Se discuten las tablas lógicas INSERTED y DELETED, así como las mejores prácticas para su gestión y rendimiento. Además, se enfatiza la importancia de los triggers para mantener la integridad de los datos y la auditoría automática en las bases de datos.

Cargado por

evalencia
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
3 vistas9 páginas

Triggers SQL Server

El documento proporciona una guía completa sobre triggers en SQL Server, incluyendo su definición, tipos (DML AFTER, INSTEAD OF, DDL, y LOGON), y ejemplos de uso. Se discuten las tablas lógicas INSERTED y DELETED, así como las mejores prácticas para su gestión y rendimiento. Además, se enfatiza la importancia de los triggers para mantener la integridad de los datos y la auditoría automática en las bases de datos.

Cargado por

evalencia
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd

Triggers en SQL Server | Guia Completa

TRIGGERS EN SQL SERVER

Contenido del Documento


1. Introduccion y Tipos de Triggers
2. Triggers DML AFTER: INSERT, UPDATE y DELETE
3. Tablas Logicas INSERTED y DELETED
4. Triggers INSTEAD OF y DDL Triggers
5. Gestion, Rendimiento y Buenas Practicas

SQL Server 2016 / 2019 / 2022

SQL Server - Triggers en SQL Server Pagina


Triggers en SQL Server | Guia Completa

1. Introduccion a los Triggers


Un Trigger (o disparador) es un tipo especial de procedimiento almacenado que se ejecuta
automaticamente en respuesta a ciertos eventos sobre una tabla, vista o base de datos. A
diferencia de los SPs normales, los triggers no se invocan directamente sino que son
disparados por el motor de SQL Server cuando ocurre el evento configurado.
Los triggers garantizan que ciertas reglas de negocio o de integridad se cumplan siempre, sin
importar el origen de la operacion: aplicacion, SSMS, API o script de mantenimiento.

1.1 Tipos de Triggers en SQL Server

Tipo Evento que lo dispara Uso Principal


DML AFTER INSERT, UPDATE, DELETE Auditoria, validacion, cascadas
en tabla personalizadas
DML INSTEAD OF INSERT, UPDATE, DELETE Reemplazar operacion, vistas actualizables
(tabla o vista)
DDL (Database) CREATE, ALTER, DROP de Proteger esquema, registrar cambios
objetos estructurales
LOGON Inicio de sesion de usuario Control de acceso, restriccion de conexiones

1.2 Cuando usar un Trigger


• Auditoria automatica: registrar quien, que y cuando modifico cada registro sin depender
de la aplicacion.
• Integridad referencial compleja que no puede lograrse con FOREIGN KEY o CHECK
estandar.
• Sincronizacion automatica de tablas calculadas o historial de cambios.
• Prevencion de modificaciones no autorizadas en tablas o columnas criticas.
• Notificacion de eventos insertando registros en colas o tablas de mensajes.

1.3 Caracteristicas Fundamentales


• Los triggers DML AFTER se ejecutan dentro de la misma transaccion del evento que los
disparo.
• Si el trigger ejecuta ROLLBACK, tambien revierte la operacion original.
• Pueden existir multiples triggers del mismo tipo sobre la misma tabla (orden controlable
con sp_settriggerorder).
• Tienen acceso exclusivo a las tablas logicas INSERTED y DELETED con los datos
afectados.
• No reciben parametros ni devuelven valores: se comunican a traves de INSERTED,
DELETED y variables.

SQL Server - Triggers en SQL Server Pagina


Triggers en SQL Server | Guia Completa

SQL Server - Triggers en SQL Server Pagina


Triggers en SQL Server | Guia Completa

2. Triggers DML AFTER: INSERT, UPDATE y DELETE


2.1 Sintaxis General
-- Estructura de un trigger DML AFTER
CREATE TRIGGER dbo.trg_NombreTrigger
ON [Link]
AFTER INSERT, UPDATE, DELETE
AS
BEGIN
SET NOCOUNT ON;
-- Acceder a datos: tablas INSERTED y DELETED
END
GO

2.2 Trigger de Auditoria Completo


Uno de los usos mas frecuentes es registrar todos los cambios en una tabla critica dentro de
una tabla de auditoria separada, capturando la operacion, el usuario y los datos anteriores y
nuevos:

-- Tabla de auditoria
CREATE TABLE [Link] (
AuditoriaID INT IDENTITY(1,1) PRIMARY KEY,
ClienteID INT,
Operacion VARCHAR(10),
FechaHora DATETIME2 DEFAULT GETDATE(),
Usuario NVARCHAR(128) DEFAULT SUSER_SNAME(),
NombreAntes NVARCHAR(200),
NombreDespues NVARCHAR(200)
);

-- Trigger de auditoria
CREATE TRIGGER dbo.trg_AuditarClientes
ON [Link] AFTER INSERT, UPDATE, DELETE
AS
BEGIN
SET NOCOUNT ON;
DECLARE @Op VARCHAR(10) =
CASE WHEN EXISTS(SELECT 1 FROM INSERTED) AND EXISTS(SELECT 1 FROM
DELETED) THEN 'UPDATE'
WHEN EXISTS(SELECT 1 FROM INSERTED) THEN 'INSERT'
ELSE 'DELETE' END;
INSERT INTO [Link]
(ClienteID,Operacion,NombreAntes,NombreDespues)
SELECT COALESCE([Link],[Link]), @Op, [Link], [Link]
FROM INSERTED i FULL OUTER JOIN DELETED d ON [Link] = [Link];
END

SQL Server - Triggers en SQL Server Pagina


Triggers en SQL Server | Guia Completa

GO

SQL Server - Triggers en SQL Server Pagina


Triggers en SQL Server | Guia Completa

3. Tablas INSERTED y DELETED, INSTEAD OF y DDL


3.1 Tablas Logicas INSERTED y DELETED
Las tablas logicas INSERTED y DELETED son tablas virtuales disponibles dentro de cualquier
trigger DML. SQL Server las llena automaticamente con los datos involucrados en la operacion
disparadora:

Operacion INSERTED contiene DELETED contiene Uso tipico


INSERT Filas nuevas insertadas Vacia Validar datos nuevos
DELETE Vacia Filas eliminadas Archivar o auditar
UPDATE Filas con nuevos Filas con valores Comparar cambios
valores anteriores

3.2 Trigger AFTER UPDATE con Validacion de Negocio


-- Impedir reduccion de precio mayor al 50%
CREATE TRIGGER dbo.trg_ValidarPrecio
ON [Link] AFTER UPDATE
AS
BEGIN
SET NOCOUNT ON;
IF EXISTS (
SELECT 1 FROM INSERTED i JOIN DELETED d ON [Link] =
[Link]
WHERE [Link] < [Link] * 0.50
)
BEGIN
RAISERROR('Error: precio no puede reducirse mas del 50%%.',16,1);
ROLLBACK TRANSACTION;
END
END
GO

3.3 Trigger INSTEAD OF en Vista


El trigger INSTEAD OF reemplaza completamente la operacion original. Muy util para hacer
actualizables vistas que involucran multiples tablas o logica compleja:

-- Vista no actualizable por defecto


CREATE VIEW dbo.vw_ClientesActivos AS
SELECT ClienteID, Nombre, Email FROM [Link] WHERE Activo = 1;
GO
CREATE TRIGGER dbo.trg_IOF_ClientesActivos ON dbo.vw_ClientesActivos INSTEAD
OF INSERT

SQL Server - Triggers en SQL Server Pagina


Triggers en SQL Server | Guia Completa

AS
BEGIN
SET NOCOUNT ON;
INSERT INTO [Link] (Nombre, Email, Activo, FechaAlta)
SELECT Nombre, Email, 1, GETDATE() FROM INSERTED;
END
GO

3.4 DDL Trigger: Proteger el Esquema


-- Bloquear DROP TABLE en produccion
CREATE TRIGGER dbo.trg_PrevenirDrop ON DATABASE FOR DROP_TABLE, ALTER_TABLE
AS BEGIN PRINT 'Operacion DDL bloqueada.'; ROLLBACK; END
GO

SQL Server - Triggers en SQL Server Pagina


Triggers en SQL Server | Guia Completa

4. Gestion, Rendimiento y Buenas Practicas


4.1 Comandos de Administracion
-- Listar todos los triggers de la BD
SELECT name, type_desc, parent_class_desc, is_disabled FROM [Link]
ORDER BY name;

-- Ver codigo fuente de un trigger


EXEC sp_helptext 'dbo.trg_AuditarClientes';

-- Deshabilitar / Habilitar trigger


DISABLE TRIGGER dbo.trg_AuditarClientes ON [Link];
ENABLE TRIGGER dbo.trg_AuditarClientes ON [Link];

-- Eliminar trigger
DROP TRIGGER IF EXISTS dbo.trg_AuditarClientes;

4.2 Consideraciones de Rendimiento


• Los triggers se ejecutan dentro de la transaccion original: si son lentos, bloquean la
operacion completa y degradan el rendimiento de toda la aplicacion.
• Evitar consultas pesadas, cursores o llamadas a servicios externos dentro de triggers
DML.
• Los triggers procesan conjuntos de filas, no una sola fila: usar JOIN con INSERTED y
DELETED en lugar de asumir una unica fila afectada.
• Triggers anidados: SQL Server permite hasta 32 niveles. Controlar con sp_configure
"nested triggers".
• Triggers recursivos: habilitarlos con ALTER DATABASE SET RECURSIVE_TRIGGERS
ON solo si es necesario.

4.3 Tabla de Buenas Practicas

Practica Descripcion y Beneficio


SET NOCOUNT ON Obligatorio en todos los triggers para suprimir mensajes de filas
Verificar filas en Usar IF EXISTS antes de operar; la tabla puede estar vacia
INSERTED/DELETED
Nunca asumir 1 sola fila Los triggers pueden dispararse por operaciones que afectan N filas
Mantener logica minima El trigger debe ser rapido; delegar logica compleja a SPs
Documentar el trigger Indicar proposito, tabla, autor, fecha y eventos que lo activan

SQL Server - Triggers en SQL Server Pagina


Triggers en SQL Server | Guia Completa

Practica Descripcion y Beneficio


Probar con transacciones Verificar comportamiento de ROLLBACK ante errores
Evitar cadenas de triggers Triggers que disparan otros triggers dificultan el debugging

Los triggers son una herramienta poderosa para implementar reglas de negocio directamente
en la base de datos, garantizando su cumplimiento independientemente del origen de la
operacion. Usados con disciplina y documentados adecuadamente, elevan la integridad y
trazabilidad del sistema.

SQL Server - Triggers en SQL Server Pagina

También podría gustarte