Bdl8eq9exprosacap10triggers 1227846557969790 9

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 19

TRIGGERS

EQUIPO 9
FRAGOSO PEÑA FERNANDO
HUERTA GÓMEZ DANIEL
PÉREZ OCHOA VALERI
PÉREZ SAN JUAN ALDO
PAILLES RUBIÑOS FRANCISCO NICOLÁS
TRIGGERS
Los Triggers (desencadenadores), es un
mecanismo primario que provee SQL Server,
y consiste en una especialización de los
procedimientos almacenados que se activa
cuando se ejecutan sentencias que modifican
los datos o sus estructuras de alguna manera.
DML
DDL
Desencadenadores DML
 Aplicar cambios en cascada sobre las tablas.
 Evitar sentencias maliciosas de INSERT, UPDATE
y DELETE.
 Llevar auditoría en tablas al efecto, de los cambios
realizados en la base de datos.
 Evaluar el estado de una tabla antes y después de los
cambios.
 Mantener actualizadas tablas totalizadoras.
 Mantener actualizados campos calculados.
Tipos de desencadenadores DML:
AFTER
INSTEAD OF
.NET
Comparación de desencadenadores AFTER e INSTEAD OF
FUNCIÓN AFTER INSTED OF
Uso Tablas Tablas y vistas
Cantidad por tabla o vista Múltiple por acción de INSERT, Uno por acción de INSERT,
UPDATE o DELETE. UPDATE o DELETE.

Acción en cascada No tiene restricciones. INSTED OF UPDATE y


DELETE no están
Permitidos en tablas que son
destino de
Acciones de integridad
referencial en cascada.
Ejecución Después: Antes:
•Proceso de restricciones. •Proceso de restricciones.
•Acciones de integridad referencial declarativa. En lugar de:
•Creación de tablas inserted y deleted. •Acción del desencadenador.
•Acción del trigger.
•Creación de tablas inserted y deleted.

Orden de ejecución Se debe especificar orden. No aplicable.


Referencias a columnas Permitida. Permitida.
varchar(MAX), nvarchar(MAX),
Y varbinary(MAX) en tablas
Inserted y deleted.
Referencias a columnas text, No permitida. Permitida.
Ntext e image en tablas
Inserted y deleted.
Existen dos tablas especiales que intervienen en los
desencadenadores:
 Inserted
 Deleted
La tabla deleted almacena copia de las filas afectadas
durante la ejecución de sentencias UPDATE o
DELETE
La tabla inserted también almacena las filas
afectadas, pero durante la ejecución de sentencias
INSERT o UPDATE.
Ambas son creadas y administradas en forma
automática por SQL Server con el objeto de mantener
los datos intermedios durante el proceso de un
desencadenador.
Estas tablas se pueden utilizar para:
Extender la integridad referencial entre tablas.
Insertar o modificar datos en las tablas de base
de vista.
Controlar errores y tomar acción.
Hallar la diferencia entre estados entre la tabla
original y los cambios producidos.
Desencadenadores DDL
Los desencadenadores DDL, pueden tener alcance de
base de datos o de servidor (reaccionan ante ciertos
eventos disparados en ambos ámbitos).
CREATE TRIGGER TRG_TBLAdvertencia
ON DATABASE
FOR DROP_TABLE, ALTER_TABLE
AS
PRINT ‘Debe deshabilitar el
desencadenador TRG_IUD_AUDIT para
ejecutar esta sentencia’
ROLLBACK;
Desencadenadores CLR
Requiere las siguientes acciones:
 Definir el desencadenador como una clase en
lenguaje de .NET.
 Registrar el ensamblado (assemby) en SQL
Server referenciando a aquél creado en el
CLR.
 Crear el desencadenador haciendo referencia
al ensamblado, clase y método.
Los desencadenadores CLR pueden tener
acceso a las tablas INSERTED y DELETED
a través de un objeto propio el
SqlCommand, del objeto SqlContext.
sqlCommand sqlCom = SqlContext.GetCommand()
sqlComm.CommandText = “SELECT column_1 from
INSERTED”;
La información de los eventos que disparan el
desencadenador quedará disponible en la
propiedad EventData del objeto
SqlTriggerContext. Esta propiedad
contiene un valor en formato XML que tiene:
Hora del evento.
Identificación del proceso o de la conexión a
partir de lo cuáles se disparó el evento.
Tipo de evento que disparó el desencadenador.
Creación de desencadenadores DDL
y DML
Antes de crear un desencadenador, se debe tener en
cuenta:
 La sentencia CREATE TRIGGER debe ser la primera en la
secuencia de comandos T-SQL.
 Los permisos de creación de desencadenador son los de la
tabla sobre la cual se está creando el desencadenador.
 Los desencadenadores DML son objetos de la base de datos y
deben seguir las reglas de identificación de objetos.
 Sólo se pueden crear desencadenadores en la base de datos
en la que está posicionado.
 No se pueden crear desencadenadores sobre tablas
temporarias o las tablas de sistema.
 Los desencadenadores INSTEAD OF DELETE e INSTEAD OF
UPDATE no pueden crearse en tablas que tienen definidas
claves foráneas con acciones de UPDATE o DELETE.
 Los desencadenadores definidos para DELETE no se
dispararán.
Creación de
desencadenadores
Para crear un desencadenador, se debe
indicar:
1) El nombre.
2) La tabla sobre la cual ha de crearse.
3) Cuánto se ha de disparar.
4) Las sentencias que lo activan.
5) Las sentencias de modificación de datos que
lo componen.
Donde:
Esquema  INSTEAD OF
Nombre  DELETE] [,] [INSERT][,]
Tabla/vista [UPDATE]}
DATABASE  Tipo _ evento
ALL SERVER  Grupo _ evento
WITH ENCRYPTION  WITH APPEND
EXECUTE AS  NOT FOR REPLICATION
AFTER  AS
 Sentencia_sql
 Especificador_de_metodo
Funciones UPDATE() y
COLUMNS_UPDATE()

Se puede utilizar la función UPDATE() para determinar


si una sentencia INSERT o UPDATE afectó una
columna específica de una tabla. La función devuelve trae
o FALSE.
COLUMNS_UPDATE
Permite evaluar varias columnas al mismo tiempo,
devolviendo un patrón de bytes por las columnas
modificadas (por inserción o actualización). El patrón
devuelto es del tipo varbinary, y para verificar este
patrón, es necesario utilizar operadores binarios y una
máscara.
Anular la acción de un desencadenador

No es lo mismo ejecutar un ROLLBACK en un


desencadenador que en una transacción normal
dentro de un procedimiento almacenado.
Documentar los desencadenadores
Excepto en los casos de los desencadenadores
encriptados, donde conviene documentar el código,
se recomienda mantener al menos un gráfico de
interacción entre desencadenadores y tablas
afectadas, ya que puede resultar muy difícil entender
el funcionamiento del modelo de datos.
Ejemplo de documentación de
desencadenadores.

PRC_ACTUALIZARSALARIO NominaSalarial

TRG_IU_ACTUALIZARRETENCIONES

TRG_IU_ACTUALIZARRETENCIONES
Perfiles

Programador Retenciones
O usuario
Deshabilitar desencadenadores
Para eliminar un desencadenador, se debe ejecutar la sentencia:
DISABLE TRIGGER [esquema . ] nombre ON
{ nombre_objeto| DATABASE | SERVER } [ : ]
Eliminar desencadenadores
Con el objeto de eliminar un desencadenador, se debe
ejecutar:
Para el caso de los desencadenadores DML:
DROP TRIGGER esquema.nombre [ ,…n ] [ ; ]
Para el caso de los desencadenadores DDL:
DROP TRIGGER nombre [ ,…n ]
ON { DATABASE | ALL SERVER }
[ ; ]
Modificar desencadenadores
Al igual que los procedimientos almacenados, la
modificación de desencadenador exige la sentencia
ALTER y la reescritura de toda su definición.
Desencadenadores anidados y
recursivos
Se considera que un desencadenador está anidado
cuando es disparado por acción de otro
desencadenador. Los desencadenadores pueden
anidarse hasta 32 niveles y su configuración puede
modificarse por medio de la opción de configuración
de servidor nested Triggers.
Existen dos tipos de recursividad:
Recursividad directa
Recursividad indirecta
La opción de configuración de base de datos
RECURSIVE_TRIGGERS sólo previene contra la
recursividad directa cuando está fijada en OFF. Los
desencadenadores INSTEAD OF no son
contemplados por esta opción.

NOTA: Los desencadenadores son ideales para


utilizar en situaciones en las que las restricciones
no cumplen con una necesidad funcional.

También podría gustarte