CLDHDHDHD
CLDHDHDHD
CLDHDHDHD
UPN.EDU.PE
Semana 04
Disparadores
Transacciones: commit y rollback
Presentación de la sesión
Logro de sesión
Al final de la sesión el alumno podrá crear disparadores con criterio y lógica , también
comprenderá como se ejecutan las transacciones en SQL Server, para la aplicación de la lógica
de los procesos de negocios.
Temario
• Disparadores (TRIGGERS)
• Transacciones (Commit, Rollback)
¿Qué es un trigger?
LENGUAGE DE CONTROL DE
TRANSACCIONES (TCL)
LENGUAGE DE CONTROL DE TRANSACCIONES (TCL)
• Una transacción es un conjunto de operaciones Transact SQL que se ejecutan como un único bloque. es
decir, todas las declaraciones deben ejecutarse correctamente o ninguna de las declaraciones debe
ejecutarse.
• La transacción más simple en SQL Server es una única sentencia SQL. una transacción ‘autocommit’, una
transacción autocompletada, se denomina transacción implicita.
BEGIN TRANSACTION
BEGIN TRY
/* Descontamos el monto de la cuenta a decrementar */
UPDATE CUENTAS SET SALDO = SALDO - @Monto WHERE NUMCUENTA = @CuentaADecrementar
/* Incrementamos el monto de la cuenta a incrementar */
UPDATE CUENTAS SET SALDO = SALDO + @Monto WHERE NUMCUENTA = @CuentaAIncrementar
/* Confirmamos la transaccion*/
COMMIT TRANSACTION
END TRY
BEGIN CATCH
/* Ocurrió un error, deshacemos los cambios*/
ROLLBACK TRANSACTION
PRINT 'Ha ocurrido un error!'
END CATCH
LENGUAGE DE CONTROL DE TRANSACCIONES (TCL)
EJEMPLO:
LENGUAGE DE CONTROL DE TRANSACCIONES (TCL)
BEGIN TRAN
-- Confirmamos la transaccion
COMMIT
DISPARADORES (TRIGGERS)
DISPARADORES (TRIGGERS)
¿Qué es un TRIGGER?
Los triggers se utilizan comúnmente para garantizar la integridad de los datos (Reglas
complejas), para auditar los cambios realizados en una tabla, para mantener copias de
seguridad o para automatizar ciertas tareas administrativas. En general, los triggers son una
herramienta muy útil para mejorar la eficiencia y la confiabilidad de las operaciones de base
de datos en SQL Server.
DISPARADORES (TRIGGERS)
Implemente un trigger DML en la tabla Distritos, que muestre un mensaje cada vez que se realice
una inserción o actualización o eliminación.
Comprobamos el efecto del desencadenador o trigger cuando insertamos una nueva categoría.
SET NOCOUNT ON
INSERT INTO RRHH.Distritos VALUES(6,'Breña')
DISPARADORES (TRIGGERS)
Ejemplo de disparadores
Ejemplo de disparadores
Ejemplo 1
• Crear un TRIGGER en el esquema RRHH con el nombre TRG_INS_CARGO, que se va a ejecutar cada vez
que se realiza un registro en la tabla CARGOS.
• Dentro del TRIGGER TRG_INS_CARGO, se registra en el siguiente mensaje en la tabla LOG_TABLE
'INSERCION EN LA TABLA CARGOS' y el usuario del Sistema Operativo que realizó la inserción (use
SUSER_NAME()).
Ejemplo 1
Ejemplo 2
Crear un TRIGGER en el esquema RRHH con nombre TRG_UPD_PRODUCTO, en la cual solo permita
actualizar el precioUnidad de PRODUCTOS en horario de 8:00 a 12:00, caso contrario revertir la
transacción y devolver un mensaje usando RAISERROR con severidad 10.
CREATE OR ALTER TRIGGER COMPRAS.TRG_UPD_PRODUCTO
ON Compras.productos
FOR UPDATE
AS
BEGIN
IF DATEPART(HH,getdate()) NOT BETWEEN 8 AND 12
BEGIN
PRINT 'SON LAS' + STR(DATEPART(HH,getdate())) + ' HORAS'
ROLLBACK TRANSACTION
RAISERROR('!!SE ENCUENTRA FUERA DEL HORARIO PARA ACTUALIZAR',10,1)
END
END
DISPARADORES (TRIGGERS)
Ejemplo 3
Modificar el TRIGGER con nombre TRG_UPD_PRODUCTO, en el cual se incluya la instrucción INSERT y cambie
la severidad de RAISERROR para que genere una excepción.
CREATE OR ALTER TRIGGER COMPRAS.TRG_UPD_PRODUCTO
ON Compras.productos
FOR UPDATE, INSERT
AS
BEGIN
IF DATEPART(HH,getdate()) NOT BETWEEN 8 AND 12
BEGIN
PRINT 'SON LAS' + STR(DATEPART(HH,getdate())) + ' HORAS'
ROLLBACK TRANSACTION
RAISERROR('!!SE ENCUENTRA FUERA DEL HORARIO PARA ACTUALIZAR',16,1)
END
END
DISPARADORES (TRIGGERS)
Ejemplo 4
DESACTIVE el trigger para que permita actualizar el precio de unidad y verifique que se pueda actualizar.
Ejemplo 5
Por regla de negocio se ha definido que no se puede incrementar el preciodeunidad de los productos
más del 30% del precio actual. Cree un trigger que permita asegurar esta regla, caso contrario revertir la
trasacción y devolver un mensaje usando RAISERROR, con severidad 10, indicando cual es el valor
máximo que se puede actualizar
DISPARADORES (TRIGGERS)
END
DISPARADORES (TRIGGERS)
Ejemplo 6
Implemente un trigger DDL que impida hacer cambios o eliminación a las tablas de la Base de Datos
Negocios, por un tema de seguridad.
CREATE OR ALTER TRIGGER trgImpideEliminarTablas
ON DATABASE
AFTER DROP_TABLE
AS
BEGIN
RAISERROR('!!NO PUEDE ELIMINAR UNA TABLA EN ESTA BD',16,1)
ROLLBACK
END
¿Preguntas o comentarios?
CONCLUSIONES
Un desencadenante en SQLSERVER se ejecuta
automáticamente cuando se produce un evento
desencadenante.
• TRIGGER DML(https://learn.microsoft.com/es-es/sql/relational-databases/triggers/dml-
triggers?view=sql-server-ver16 )
• TRIGGER DDL(https://learn.microsoft.com/es-es/sql/relational-databases/triggers/ddl-triggers?view=sql-
server-ver16 )
• TRASACCIONES (https://learn.microsoft.com/es-es/sql/t-sql/language-elements/transactions-transact-
sql?view=sql-server-ver16 )
GRACIAS