Trigger para delete
CREATE OR ALTER TRIGGER t_delete
ON UsuarioTarget
AFTER DELETE
AS
BEGIN
IF (ROWCOUNT_BIG() = 0)
RETURN;
select Codigo, Nombre, Puntos from deleted
Print 'Se realizó un delete'
END
GO
Introducción al curso
Cómo aprenderás sobre optimización de bases de datos en SQL Server
¿Por qué es importante optimizar tu base de datos?
Lista de requerimientos
Instalación de herramientas
Instalación de la base de datos
Analizar un plan de ejecución
Conociendo los índices
Analizar las consultas para crear índices
¿Cómo nos pueden ayudar los índices?
Cuál índice utilizar y cómo forzar uno en específico
¿Siempre son buenos los índices?
Optimización de consultas
Qué es Merge y cómo podemos utilizarlo
Distintas opciones de utilizar Merge
Qué es un Trigger y cómo podemos crearlo
Manejo de errores en trigger
Triggers a nivel administrativo
Qué es un Constraint y cómo funciona
Tablas versionadas
Utilizando Full Text Search para búsquedas
Queries más inteligentes
Cómo funcionan las funciones tabla
Tipos de funciones
Cómo funcionan las vistas
Procedimientos almacenados
Tablas temporales vs. tablas variables
Optimización de base de datos
Configuración de un Database Mail
Planes de mantenimiento: ordenar los índices en nuestra base de datos
Planes de mantenimiento: estrategia de respaldos
Planes de mantenimiento: log de base de datos con un tamaño controlado
Configurando TempDB
Monitoreo
Monitoreo con sp_who3
Monitoreo de actividades
Conclusión
Conclusión del curso
No tienes acceso a esta clase
¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera
Aportes 12
Preguntas 4
Trigger para delete
CREATE OR ALTER TRIGGER t_delete
ON UsuarioTarget
AFTER DELETE
AS
BEGIN
IF (ROWCOUNT_BIG() = 0)
RETURN;
select Codigo, Nombre, Puntos from deleted
Print 'Se realizó un delete'
END
GO
Un disparador o trigger es una funcionalidad que la base de datos ejecuta de forma automática cuando se realiza una operación de tipo Insert, Update o Delete en una tabla o vista, o cuando se ejecuta una consulta SQL sobre una tabla o vista.
Se crean para conservar la integridad referencial y la coherencia entre los datos entre distintas tablas; para registrar los cambios que se efectúan sobre las tablas y la identidad de quien los realizó; para realizar cualquier acción cuando una tabla es modificada; etc.
Si se intenta modificar (agregar, actualizar o eliminar) datos de una tabla asociada a un disparador, el disparador se ejecuta (se dispara) en forma automática.
La diferencia con los procedimientos almacenados del sistema es que los triggers:
• no pueden ser invocados directamente; al intentar modificar los datos de una tabla asociada a un disparador, el disparador se ejecuta automáticamente.
• no reciben y retornan parámetros.
• son apropiados para mantener la integridad de los datos, no para obtener resultados de consultas.
Sintaxis general para crear un disparador:
create or replace trigger NOMBREDISPARADOR
MOMENTO-- before, after o instead of
EVENTO-- insert, update o delete
of CAMPOS-- solo para update
on NOMBRETABLA
NIVEL–puede ser a nivel de sentencia (statement) o de fila (for each row)
when CONDICION–opcional
begin
CUERPO DEL DISPARADOR–sentencias
end NOMBREDISPARADOR;
Los triggers se crean con la instrucción “create trigger” seguido del nombre del disparador. Si se agrega “or replace” al momento de crearlo y ya existe un trigger con el mismo nombre, tal disparador será borrado y vuelto a crear.
“MOMENTO” indica cuando se disparará el trigger en relación al evento, puede ser BEFORE (antes), AFTER (después) o INSTEAD OF (en lugar de). “before” significa que el disparador se activará antes que se ejecute la operación (insert, update o delete) sobre la tabla, que causó el disparo del mismo. “after” significa que el trigger se activará después que se ejecute la operación que causó el disparo. “instead of” sólo puede definirse sobre vistas, anula la sentencia disparadora, se ejecuta en lugar de tal sentencia (ni antes ni después).
“EVENTO” especifica la operación (acción, tipo de modificación) que causa que el trigger se dispare (se active), puede ser “insert”, “update” o “delete”; DEBE colocarse al menos una acción, puede ser más de una, en tal caso se separan con “or”. Si “update” lleva una lista de atributos, el trigger sólo se ejecuta si se actualiza algún atributo de la lista.
“on NOMBRETABLA” indica la tabla (o vista) asociada al disparador;
“NIVEL” puede ser a nivel de sentencia o de fila. “for each row” indica que el trigger es a nivel de fila, es decir, se activa una vez por cada registro afectado por la operación sobre la tabla, cuando una sola operación afecta a varios registros. Los triggers a nivel de sentencia, se activan una sola vez (antes o después de ejecutar la operación sobre la tabla). Si no se especifica, o se especifica “statement”, es a nivel de sentencia.
“CUERPO DEL DISPARADOR” son las acciones que se ejecutan al dispararse el trigger, las condiciones que determinan cuando un intento de inserción, actualización o borrado provoca las acciones que el trigger realizará. El bloque se delimita con “begin… end”.
Entonces, un disparador es un bloque de código asociado a una tabla que se dispara automáticamente antes o después de una sentencia “insert”, “update” o “delete” sobre la tabla.
Se crean con la instrucción “create trigger” especificando el momento en que se disparará, qué evento lo desencadenará (inserción, actualización o borrado), sobre qué tabla (o vista) y las instrucciones que se ejecutarán.
Los disparadores pueden clasificarse según tres parámetros:
• el momento en que se dispara: si se ejecutan antes (before) o después (after) de la sentencia.
• el evento que los dispara: insert, update o delete, según se ejecute una de estas sentencias sobre la tabla.
• nivel: dependiendo si se ejecuta para cada fila afectada en la sentencia (por cada fila) o bien una única vez por sentencia independientemente de la filas afectadas (nivel de sentencia).
Consideraciones generales:
• Las siguientes instrucciones no están permitidas en un desencadenador: create database, alter database, drop database, load database, restore database, load log, reconfigure, restore log, disk init, disk resize.
• Se pueden crear varios triggers para cada evento, es decir, para cada tipo de modificación (inserción, actualización o borrado) para una misma tabla. Por ejemplo, se puede crear un “insert trigger” para una tabla que ya tiene otro “insert trigger”.
A continuación veremos la creación de disparadores para los distintos sucesos (inserción, borrado, actualización) y todas las cláusulas adicionales.
He creado un Trigger que, al hacer un DELETE a mi tabla, me inserta automáticamente un registro nuevo en el que, tanto en la columna de **++Código ++**como en la de Puntos se genera un integer aleatorio entre en 1 y el 99, mientras que en el Nombre se genera un Varchar con el string “Aleatorio” y un número aleatorio, valga la redundancia.
¡Espero haberme explicado bien!
CREATE TRIGGER t_delete
ON [UsuarioTarget]
AFTER DELETE
AS
BEGIN
INSERT INTO [UsuarioTarget]
VALUES(FLOOR(RAND()*(99-1)+1), CONCAT('Aleatorio',CAST(FLOOR(RAND()*(99-1)+1) AS VARCHAR)), FLOOR(RAND()*(99-1)+1))
Print '¡Se ha borrado un registro y se ha creado otro aleatorio!'
END
Yo hice una tabla Log para que en caso de que ocurra cualquiera de los triggers que se pueda llevar un registro en caso de que algo pase se pueda reversar 😃
<code>
/*
--DROP TABLE UsuarioTarget_log
CREATE TABLE UsuarioTarget_log
(
[id] [int] IDENTITY(1,1) PRIMARY KEY NOT NULL,
Codigo INT,
Nombre VARCHAR(100),
Puntos INT,
DateChange DATETIME,
ActionChange VARCHAR(100),
UserChange VARCHAR(100)
)
--Select * From UsuarioTarget_log
*/
CREATE OR ALTER TRIGGER t_delete
ON UsuarioTarget
AFTER DELETE
AS
BEGIN
IF (ROWCOUNT_BIG() = 0)
RETURN;
Insert into UsuarioTarget_log
select Codigo, Nombre, Puntos, GETDATE() as'DateChange', 'DELETE AFTER' as 'ActionChange',SUSER_NAME() as 'UserChange'
from deleted
Print 'Se realizó un delete'
END
GO
Los triggers son unas herramientas poderosas, pero hay que tener mucho cuidado, por que puede ser un cuello de botella
CREATE OR ALTER TRIGGER t_delete
ON UsuarioTarget
AFTER DELETE
AS
BEGIN
IF (ROWCOUNT_BIG() = 0)
RETURN;
select Codigo, Nombre, Puntos from deleted
Print 'Se realizó un delete'
END
GO
Trigger es un a especie de SP que esta relacionado con una tabla que se ejecuta cuando se produce un insert, update o delete en la tabla.
Sirve para ejecutar varias acciones como notificaciones, validadores, otros.
create trigger t_delete
on dbo.UsuarioSource
after delete
as
begin
if (ROWCOUNT_BIG()= 0)
RETURN;
Select Codigo,Nombre,Puntos
from deleted
print 'Successful delete'
end
CREATE TRIGGER t_delete
ON usuario_target
after DELETE
AS
BEGIN
IF (rowcount_big()=0)
RETURN;
SELECT codigo, nombre, punto
FROM inserted
PRINT'se hizo el delete'
END
GO
CREATE TRIGGER t_DELETE
ON UsuarioTarget
AFTER DELETE
AS
BEGIN
IF(ROWCOUNT_BIG() = 0)
RETURN;
SELECT Codigo, Nombre, Puntos
FROM INSERTED
Print 'Se realizo el DELETE'
END
CREATE OR ALTER TRIGGER T_DELETE
ON UsuarioTarget
AFTER DELETE
AS
BEGIN
IF (ROWCOUNT_BIG() = 0)
RETURN;
select Codigo, Nombre, Puntos from deleted
Print ‘Se realizó un DELETE’
END
Reto realizado:
--RETO: Hacer el Trigger del Delete
CREATE TRIGGER t_delete
ON UsuarioTarget
AFTER DELETE
AS
BEGIN
IF(ROWCOUNT_BIG() = 0)
RETURN;
SELECT Codigo,Nombre,Puntos
FROM INSERTED
PRINT 'Se realizó el delete'
END
DELETE FROM UsuarioTarget
WHERE Codigo = 7;
CREATE OR ALTER TRIGGER t_Delete
ON UsuarioTarget
AFTER DELETE
AS
BEGIN
IF (ROWCOUNT_BIG() = 0)
RETURN;
select Codigo, Nombre, Puntos from inserted
Print 'Se realizó un delete'
END
GO
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?