0% encontró este documento útil (0 votos)
16 vistas19 páginas

Triggers DDL

bd

Cargado por

elangelgabriel35
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 PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
16 vistas19 páginas

Triggers DDL

bd

Cargado por

elangelgabriel35
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 PDF, TXT o lee en línea desde Scribd

BASE DE DATOS II

Lic. Rosa Irene López Loza

Triggers DDL
Características

Esta clase de Triggers se activa en eventos que modifican la


estructura de la base de datos (como crear, modificar o
eliminar una tabla) o en ciertos eventos relacionados con el
servidor, como cambios de seguridad o actualización de
eventos estadísticos
Se ejecutan en respuesta a una variedad de eventos de
lenguaje de definición de datos (DDL) y también a
determinados procedimientos almacenados del sistema que
ejecutan operaciones de tipo DDL.
Eventos de un Trigger DDL

Los eventos que hacen que se dispare un Trigger DDL


según el alcance de los mismos, son de dos tipos:

❖ Eventos que tienen alcance de base de datos


❖ Eventos que tienen alcance de servidor
Sintaxis General

CREATE [ OR ALTER ] TRIGGER NombreTrigger


ON { ALL SERVER | DATABASE }
{ FOR | AFTER } { TipoEvento | GrupoEventos } [ ,…n ]
AS
Begin
Instrucciones T-SQL
End
Algunas consideraciones

Para prohibir una instrucción DDL Al definir un trigger DDL, es


en el trigger asociado, es necesario indicar la instrucción
necesario anular la transacción DDL que permite su ejecución,
con la instrucción ROLLBACK. así como su ámbito.

Para seguir mejor las diferentes


ejecuciones de las instrucciones No es posible definir triggers DDL
DDL, es posible utilizar la función de tipo instead of.
EVENTDATA() en los triggers DDL.
Transacción

 Una transacción es un conjunto de operaciones que serán tratadas como una


sola.
 El conjunto de operaciones debe marcarse como transacción para que todas
las operaciones que la conforman tengan éxito o fracasen.
 Estas transacciones deben cumplir 4 propiedades fundamentales comúnmente
conocidas como ACID (atomicidad, coherencia, asilamiento y durabilidad).
 La transacción más simple en SQL Server es una única sentencia SQL.
Ejemplo:
UPDATE Productos SET PrecioUnitario = 20 WHERE NombreProducto = ‘ C '
Sentencias para una transacción

SENTENCIAS DESCRIPCIÓN
BEGIN TRAN Se utiliza para indicar el comienzo de una
transacción.
ROLLBACK Se utiliza para deshacer todas las modificaciones
TRANSACTION realizadas, si alguna de las operaciones de la
transacción falla, y debe volver al estado inicial en el
que estaba la base de datos antes de empezar.
COMMIT Se utiliza para confirmar las modificaciones
TRANSACTION realizadas, si todas las operaciones de una
transacción se completan con éxito.
Activar, Desactivar y Eliminar un Trigger

Activar: ENABLE TRIGGER {Nombre_Trigger} ON DATABASE

Eliminar : DROP TRIGGER {Nombre_Trigger} ON DATABASE

Desactivar: DISABLE TRIGGER {Nombre_Trigger} ON DATABASE


Ejemplo. Crear un Trigger para evitar que se
creen, eliminen o modifiquen tablas

CREATE TRIGGER trNoCrearEliminarModificarTablas


ON DataBase
FOR CREATE_TABLE, DROP_TABLE, ALTER_TABLE
AS
BEGIN
RAISERROR (‘TRANSACCIÓN ANULADA! No se permite crear, eliminar o editar
tablas’ , 16, 1)
Rollback transaction
END
go
FUNCIÓN EVENTDATA ()

Esta función devuelve información sobre eventos del servidor o de la


base de datos.
Un Trigger DDL admite el uso interno de EVENTDATA.

Sintaxis:
EventData()
FUNCIÓN EVENTDATA ()

La información acerca de un evento que activa un desencadenador DDL se


captura mediante la función EVENTDATA.
Esta función devuelve un valor XML .
El esquema XML incluye información acerca de lo siguiente:
 La hora del evento.
 El Id. de proceso del sistema (SPID) de la conexión en la cual se ha ejecutado
el desencadenador.
 El tipo de evento que ha activado el desencadenador.
En función del tipo de evento, el esquema incluirá información adicional, como la
base de datos en la que se ha producido el evento, el objeto en el que se ha
producido el evento y la instrucción Transact-SQL del evento
Ejemplo
Crear un trigger DDL que se dispara cada vez que se crea
una tabla. La función eventdata devuelve, en formato
XML, los datos del trigger.

CREATE TRIGGER DDL_TEST


ON DATABASE
FOR CREATE_TABLE
AS
PRINT CONVERT(varchar(max),eventdata()))
EJEMPLO: Crear un Trigger que se dispare cuando
se crea una vista y capture el evento creado.

CREATE TRIGGER trCapturarCrearVista


on Database
For Create_View
As
Begin
Select EVENTDATA()
End
go
Crear una vista para que el trigger
creado se dispare

CREATE VIEW vistaMedicos


As
SELECT IdMedico 'Código',
nombreMedico+' '+ApPaternoMedico+'
'+apMaternoMedico as Nombre, turno turno
FROM Medicos
GO
Ejemplo: Crear un trigger que se dispare al crear, modificar o
eliminar un procedimiento almacenado, almacenar la instrucción
ejecutada en una tabla PHistorial

1ro. crear la tabla. CREATE TABLE PHistorial


(TipoEvento nvarchar(200),
Fecha DateTime,
Servidor nvarchar(100),
InicioSesion nvarchar(100),
Equipo nvarchar(100),
ComandoTSQL nvarchar(400)
)
CREATE TRIGGER trHistoriaPA
on Database
for Create_Procedure, Alter_Procedure, Drop_Procedure
As
Begin
insert into PHistorial
(TipoEvento, Fecha, Servidor, InicioSesion, Equipo, ComandoTSQL)
2do.
Select EVENTDATA().value
Crear el (‘(/EVENT_INSTANCE/EventType)[1]’,’nvarchar(200)’),
Trigger EVENTDATA().value (‘(/EVENT_INSTANCE/PostTime)[1]’,’Datetime’),
EVENTDATA().value (‘(/EVENT_INSTANCE/ServerName)[1]’,’nvarchar(100)’),
EVENTDATA().value (‘(/EVENT_INSTANCE/LoginName)[1]’,’nvarchar(100)’),
HOST_NAME(), EVENTDATA().value
(‘(/EVENT_INSTANCE/TSQLCommand/CommandText)[1]’,’nvarchar(400)’)
End
Para que el Trigger se dispare, crear un
procedimiento almacenado para listar los Pacientes

3ro. Crear el Procedimiento Almacenado


Create procedure spPacientesListado
As
Select IdPac As ‘Código’, NomPaciente As ‘Paciente’
from Pacientes
order by Paciente
go
Modificar el procedimiento para incluir un campo
adicional

Alter procedure spPacientesListado


As
Select IdPac ‘Código’, NomPaciente ‘Paciente’, dirPaciente
‘Dirección’
from Pacientes
order by Paciente
go
Borrar el Procedimiento Almacenado

Drop procedure spClientesListado


go

Para visualizar el contenido del historial


select * from PHistorial
go

También podría gustarte