Your SlideShare is downloading. ×
0
TRIGGERS
TRIGGERS
TRIGGERS
TRIGGERS
TRIGGERS
TRIGGERS
TRIGGERS
TRIGGERS
TRIGGERS
TRIGGERS
TRIGGERS
TRIGGERS
TRIGGERS
TRIGGERS
TRIGGERS
TRIGGERS
TRIGGERS
TRIGGERS
TRIGGERS
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

TRIGGERS

6,167

Published on

Published in: Education, Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
6,167
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
184
Comments
0
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. 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
  • 2. TRIGGERS <ul><li>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. </li></ul><ul><ul><li>DML </li></ul></ul><ul><ul><li>DDL </li></ul></ul>
  • 3. Desencadenadores DML <ul><li>Aplicar cambios en cascada sobre las tablas. </li></ul><ul><li>Evitar sentencias maliciosas de INSERT, UPDATE y DELETE. </li></ul><ul><li>Llevar auditor ía en tablas al efecto, de los cambios realizados en la base de datos. </li></ul><ul><li>Evaluar el estado de una tabla antes y después de los cambios. </li></ul><ul><li>Mantener actualizadas tablas totalizadoras. </li></ul><ul><li>Mantener actualizados campos calculados. </li></ul><ul><li>Tipos de desencadenadores DML: </li></ul><ul><ul><li>AFTER </li></ul></ul><ul><ul><li>INSTEAD OF </li></ul></ul><ul><ul><li>.NET </li></ul></ul>
  • 4. 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, UPDATE o DELETE. Uno por acción de INSERT, 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 <ul><li>Después: </li></ul><ul><li>Proceso de restricciones. </li></ul><ul><li>Acciones de integridad referencial declarativa. </li></ul><ul><li>Creación de tablas inserted y deleted. </li></ul><ul><li>Acción del trigger. </li></ul><ul><li>Creación de tablas inserted y deleted. </li></ul><ul><li>Antes: </li></ul><ul><li>Proceso de restricciones. </li></ul><ul><li>En lugar de: </li></ul><ul><li>Acción del desencadenador. </li></ul>Orden de ejecución Se debe especificar orden. No aplicable. Referencias a columnas varchar(MAX), nvarchar(MAX), Y varbinary(MAX) en tablas Inserted y deleted. Permitida. Permitida. Referencias a columnas text, Ntext e image en tablas Inserted y deleted. No permitida. Permitida.
  • 5. <ul><li>Existen dos tablas especiales que intervienen en los desencadenadores: </li></ul><ul><ul><li>Inserted </li></ul></ul><ul><ul><li>Deleted </li></ul></ul><ul><li>La tabla deleted almacena copia de las filas afectadas durante la ejecución de sentencias UPDATE o DELETE </li></ul><ul><li>La tabla inserted también almacena las filas afectadas, pero durante la ejecución de sentencias INSERT o UPDATE. </li></ul><ul><li>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. </li></ul>
  • 6. <ul><li>Estas tablas se pueden utilizar para: </li></ul><ul><ul><li>Extender la integridad referencial entre tablas. </li></ul></ul><ul><ul><li>Insertar o modificar datos en las tablas de base de vista. </li></ul></ul><ul><ul><li>Controlar errores y tomar acción. </li></ul></ul><ul><ul><li>Hallar la diferencia entre estados entre la tabla original y los cambios producidos. </li></ul></ul>
  • 7. Desencadenadores DDL <ul><li>Los desencadenadores DDL, pueden tener alcance de base de datos o de servidor (reaccionan ante ciertos eventos disparados en ambos ámbitos). </li></ul><ul><li>CREATE TRIGGER TRG_TBLAdvertencia </li></ul><ul><li>ON DATABASE </li></ul><ul><li>FOR DROP_TABLE, ALTER_TABLE </li></ul><ul><li>AS </li></ul><ul><li>PRINT ‘Debe deshabilitar el desencadenador TRG_IUD_AUDIT para </li></ul><ul><li>ejecutar esta sentencia’ </li></ul><ul><li>ROLLBACK; </li></ul>
  • 8. Desencadenadores CLR <ul><li>Requiere las siguientes acciones: </li></ul><ul><li>Definir el desencadenador como una clase en lenguaje de .NET. </li></ul><ul><li>Registrar el ensamblado (assemby) en SQL Server referenciando a aquél creado en el CLR. </li></ul><ul><li>Crear el desencadenador haciendo referencia al ensamblado, clase y método. </li></ul>
  • 9. <ul><li>Los desencadenadores CLR pueden tener acceso a las tablas INSERTED y DELETED a través de un objeto propio el SqlCommand, del objeto SqlContext. </li></ul><ul><li>sqlCommand sqlCom = SqlContext.GetCommand() </li></ul><ul><li>sqlComm.CommandText = “SELECT column_1 from INSERTED”; </li></ul>
  • 10. <ul><li>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: </li></ul><ul><ul><li>Hora del evento. </li></ul></ul><ul><ul><li>Identificación del proceso o de la conexión a partir de lo cuáles se disparó el evento. </li></ul></ul><ul><ul><li>Tipo de evento que disparó el desencadenador. </li></ul></ul>
  • 11. Creación de desencadenadores DDL y DML <ul><li>Antes de crear un desencadenador, se debe tener en cuenta: </li></ul><ul><li>La sentencia CREATE TRIGGER debe ser la primera en la secuencia de comandos T-SQL. </li></ul><ul><li>Los permisos de creación de desencadenador son los de la tabla sobre la cual se está creando el desencadenador. </li></ul><ul><li>Los desencadenadores DML son objetos de la base de datos y deben seguir las reglas de identificación de objetos. </li></ul><ul><li>Sólo se pueden crear desencadenadores en la base de datos en la que está posicionado. </li></ul><ul><li>No se pueden crear desencadenadores sobre tablas temporarias o las tablas de sistema. </li></ul><ul><li>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 . </li></ul><ul><li>Los desencadenadores definidos para DELETE no se dispararán. </li></ul>
  • 12. Creación de desencadenadores <ul><li>Para crear un desencadenador, se debe indicar: </li></ul><ul><ul><li>El nombre. </li></ul></ul><ul><ul><li>La tabla sobre la cual ha de crearse. </li></ul></ul><ul><ul><li>Cuánto se ha de disparar. </li></ul></ul><ul><ul><li>Las sentencias que lo activan. </li></ul></ul><ul><ul><li>Las sentencias de modificación de datos que lo componen. </li></ul></ul>
  • 13. <ul><li>Donde: </li></ul><ul><ul><li>Esquema </li></ul></ul><ul><ul><li>Nombre </li></ul></ul><ul><ul><li>Tabla/vista </li></ul></ul><ul><ul><li>DATABASE </li></ul></ul><ul><ul><li>ALL SERVER </li></ul></ul><ul><ul><li>WITH ENCRYPTION </li></ul></ul><ul><ul><li>EXECUTE AS </li></ul></ul><ul><ul><li>AFTER </li></ul></ul><ul><li>INSTEAD OF </li></ul><ul><li>DELETE] [,] [INSERT][,] [UPDATE]} </li></ul><ul><li>Tipo _ evento </li></ul><ul><li>Grupo _ evento </li></ul><ul><li>WITH APPEND </li></ul><ul><li>NOT FOR REPLICATION </li></ul><ul><li>AS </li></ul><ul><li>Sentencia_sql </li></ul><ul><li>Especificador_de_metodo </li></ul>
  • 14. Funciones UPDATE() y COLUMNS_UPDATE() <ul><li>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. </li></ul><ul><li>COLUMNS_UPDATE </li></ul><ul><li>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. </li></ul>
  • 15. Anular la acción de un desencadenador <ul><li>No es lo mismo ejecutar un ROLLBACK en un desencadenador que en una transacción normal dentro de un procedimiento almacenado. </li></ul><ul><li>Documentar los desencadenadores </li></ul><ul><li>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. </li></ul>
  • 16. Ejemplo de documentación de desencadenadores. NominaSalarial Retenciones Programador O usuario Perfiles PRC_ACTUALIZARSALARIO TRG_IU_ACTUALIZARRETENCIONES TRG_IU_ACTUALIZARRETENCIONES
  • 17. Deshabilitar desencadenadores <ul><li>Para eliminar un desencadenador, se debe ejecutar la sentencia: </li></ul><ul><li>DISABLE TRIGGER [esquema . ] nombre ON { nombre_objeto| DATABASE | SERVER } [ : ] </li></ul><ul><li>Eliminar desencadenadores </li></ul><ul><li>Con el objeto de eliminar un desencadenador, se debe ejecutar: </li></ul><ul><li>Para el caso de los desencadenadores DML: </li></ul><ul><li>DROP TRIGGER esquema.nombre [ ,…n ] [ ; ] </li></ul><ul><li>Para el caso de los desencadenadores DDL: </li></ul><ul><li>DROP TRIGGER nombre [ ,…n ] </li></ul><ul><li>ON { DATABASE | ALL SERVER } </li></ul><ul><li>[ ; ] </li></ul>
  • 18. Modificar desencadenadores <ul><li>Al igual que los procedimientos almacenados, la modificación de desencadenador exige la sentencia ALTER y la reescritura de toda su definición. </li></ul><ul><li>Desencadenadores anidados y recursivos </li></ul><ul><li>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. </li></ul>
  • 19. <ul><li>Existen dos tipos de recursividad: </li></ul><ul><ul><li>Recursividad directa </li></ul></ul><ul><ul><li>Recursividad indirecta </li></ul></ul><ul><li>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. </li></ul><ul><li>NOTA: Los desencadenadores son ideales para utilizar en situaciones en las que las restricciones no cumplen con una necesidad funcional. </li></ul>

×