SlideShare una empresa de Scribd logo
1 de 18
UNIVERSIDAD NACIONAL DE TRUJILLO
FACULTAD DE INGENIERÍA
E.A.P. Ingeniería de Sistemas
Sede Valle Jequetepeque
TRIGGER
Integrantes:
MACHUCA CRUZADO, ARMANDO
VASQUEZ HUAMAN, OSCAR
VARGAS LEON, LUIS
ZÚÑIGA CERDÁN, JORGE LUIS.
Asesor Metodológico:
ING. JOSE FERNANDEZ MURRUGARRA.
GUADALUPE, PERÚ
2013
INDICE
TRIGGERS ......................................................................................................................................... 3
1. DEFINICIÓN.............................................................................................................................. 3
a. Sintaxis........................................................................................................................................ 4
Limitaciones de los desencadenadores.................................................................................. 7
Ejemplos de Triggers: ............................................................................................................. 8
l. Tipo de Eventos......................................................................................................................... 11
3. VENTAJAS Y DESVENTAJAS.............................................................................................. 11
A. Ventajas:.................................................................................................................................... 11
B. Desventajas: .............................................................................................................................. 12
4. USO........................................................................................................................................... 12
5. COMPONENTES PRINCIPALES:.......................................................................................... 12
6. TIPOS........................................................................................................................................ 13
7. EFECTOS Y CARACTERÍSTICAS ........................................................................................ 13
8. ADMINISTRACIÓN DE LOS TRIGGERS............................................................................. 14
 OPERACIONES CON TRIGGERS .............................................................................................. 14
A. ALTER TRIGGER.......................................................................................................................... 14
B. DROP TRIGGER (Transact-SQL).................................................................................................. 15
C. ENABLE TRIGGER (Transact-SQL) .............................................................................................. 15
D. DISABLE TRIGGER (Transact-SQL).............................................................................................. 16
Universidad Nacional de Trujillo TRIGGERS
Escuela de Ingeniería de Sistemas
3
TRIGGERS
1. DEFINICIÓN
Un trigger (o disparador) en una Base de datos, es un procedimiento que se ejecuta
cuando se cumple una condición establecida al realizar una operación. Dependiendo
de la base de datos, los triggers pueden ser de inserción (INSERT), actualización
(UPDATE) o borrado (DELETE). Algunas bases de datos pueden ejecutar triggers
al crear, borrar o editar usuarios, tablas, bases de datos u otros objetos.
Son usados para mejorar la administración de la Base de datos, sin necesidad de
contar con que el usuario ejecute la sentencia de SQL. Además, pueden generar
valores de columnas, previene errores de datos, sincroniza tablas, modifica valores
de una vista, etc. Permite implementar programas basados en paradigma lógico
(sistemas expertos, deducción).
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 para la que se ha definido 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.
Los desencadenadores DML se ejecutan cuando un usuario intenta modificar datos
mediante un evento de lenguaje de manipulación de datos (DML). Los eventos
DML son instrucciones INSERT, UPDATE o DELETE de una tabla o vista. Estos
desencadenadores se activan cuando se desencadena cualquier evento válido, con
independencia de que las filas de la tabla se vean o no afectadas.
Universidad Nacional de Trujillo TRIGGERS
Escuela de Ingeniería de Sistemas
4
Los desencadenadores DDL se ejecutan como respuesta a diversos eventos del
lenguaje de definición de datos (DDL). Estos eventos corresponden principalmente
a instrucciones CREATE, ALTER y DROP de Transact-SQL, y a determinados
procedimientos almacenados del sistema que ejecutan operaciones de tipo DDL.
a. Sintaxis
Trigger DML
CREATETRIGGER[schema_name.]trigger_name
ON{table|view}
[WITH<dml_trigger_option>[,...n ]]
{FOR|AFTER| INSTEAD OF}
{[INSERT][,][UPDATE][,][DELETE]}
[NOTFOR REPLICATION ]
AS{sql_statement[;][,...n ]|EXTERNAL NAME <method
specifier[;]>}
<dml_trigger_option>::=
[ ENCRYPTION]
[EXECUTEAS Clause ]
<method_specifier>::=
assembly_name.class_name.method_name
-- Trigger DDL
CREATETRIGGERtrigger_name
ON{ALL SERVER | DATABASE }
[WITH<ddl_trigger_option>[,...n ]]
{FOR|AFTER}{event_type|event_group}[,...n ]
AS{sql_statement[;][,...n ]|EXTERNAL NAME < method
specifier>[;]}
<ddl_trigger_option>::=
[ ENCRYPTION]
[EXECUTEAS Clause ]
Universidad Nacional de Trujillo TRIGGERS
Escuela de Ingeniería de Sistemas
5
2. ARGUMENTOS
a. SCHEMA_NAME
Es el nombre del esquema al que pertenece un desencadenador DML. Los
desencadenadores DML tienen como ámbito el esquema de la tabla o la vista donde
se crean. schema_name no se puede especificar para los desencadenadores DDL o
LOGON.
b. TRIGGER_NAME
Es el nombre del desencadenador. El parámetro trigger_name debe cumplir con las
reglas de los identificadores, con la excepción de que trigger_name no puede
comenzar con los símbolos # o ##.
c. TABLE | VIEW
Es la tabla o vista en que se ejecuta el desencadenador DML; algunas veces se
denomina tabla del desencadenador o vista del desencadenador. Especificar el
nombre completo de la tabla o vista es opcional. Solo se puede hacer referencia a
una vista mediante un desencadenador INSTEAD OF. No es posible definir
desencadenadores DML en tablas temporales locales o globales.
d. DATABASE
Aplica el ámbito de un desencadenador DDL a la base de datos actual. Si se
especifica, el desencadenador se activa cada vez que event_type o event_group
tienen lugar en la base de datos actual.
e. ALL SERVER
Aplica el ámbito de un desencadenador DDL o logon al servidor actual. Si se
especifica, el desencadenador se activa cada vez que event_type o event_group
tienen lugar en la base de datos actual.
f. WITH ENCRYPTION
Ofusca el texto de la instrucción CREATE TRIGGER. El uso de WITH
ENCRYPTION impide que el desencadenador se publique como parte de la
replicación de SQL Server. WITH ENCRYPTION no se puede especificar para
desencadenadores CLR.
g. EXECUTE AS
Especifica el contexto de seguridad en el que se ejecuta el desencadenador. Permite
controlar qué cuenta de usuario utiliza la instancia de SQL Server para validar los
Universidad Nacional de Trujillo TRIGGERS
Escuela de Ingeniería de Sistemas
6
permisos sobre cualquier objeto de base de datos al que haga referencia el
desencadenador.
Para obtener más información, vea EXECUTE AS (cláusula de Transact-SQL).
h. FOR | AFTER
AFTER específica que el desencadenador DML solo se activa cuando todas las
operaciones especificadas en la instrucción SQL desencadenadora se han ejecutado
correctamente. Además, todas las acciones referenciales en cascada y las
comprobaciones de restricciones deben ser correctas para que este desencadenador
se ejecute.
AFTER es el valor predeterminado cuando solo se especifica la palabra clave FOR.
Los desencadenadores AFTER no se pueden definir en las vistas.
i. INSTEAD OF
Especifica que se ejecuta el desencadenador DML en vez de la instrucción SQL
desencadenadora, por lo que se suplantan las acciones de las instrucciones
desencadenadoras. INSTEAD OF no se puede especificar para los
desencadenadores DDL o logon.
Como máximo, se puede definir un desencadenador INSTEAD OF por cada
instrucción INSERT, UPDATE o DELETE en cada tabla o vista. No obstante, en
las vistas es posible definir otras vistas que tengan su propio desencadenador
INSTEAD OF.
Los desencadenadores INSTEAD OF no se permiten en vistas actualizables que
usan WITH CHECK OPTION. SQL Server genera un error cuando se agrega un
desencadenador INSTEAD OF a una vista actualizable para la que se especificó
WITH CHECK OPTION. El usuario debe quitar esta opción mediante ALTER
VIEW antes de definir el desencadenador INSTEAD OF.
j. { [ DELETE ] [ , ] [ INSERT ] [ , ] [ UPDATE ] }
Especifica las instrucciones de modificación de datos que activan el desencadenador
DML cuando se intenta en esta tabla o vista. Se debe especificar al menos una
opción. En la definición del desencadenador se permite cualquier combinación de
estas opciones, en cualquier orden.
Para los desencadenadores INSTEAD OF, no se permite la opción DELETE en
tablas que tengan una relación de integridad referencial que especifica una acción
ON DELETE en cascada. Igualmente, no se permite la opción UPDATE en tablas
que tengan una relación de integridad referencial que especifica una acción ON
UPDATE en cascada.
Universidad Nacional de Trujillo TRIGGERS
Escuela de Ingeniería de Sistemas
7
k. SQL_STATEMENT
Son las condiciones y acciones del desencadenador. Las condiciones del
desencadenador especifican los criterios adicionales que determinan si los intentos
de los eventos DML, DDL o logon hacen que se lleven a cabo las acciones del
desencadenador.
Las acciones del desencadenador especificadas en las instrucciones Transact-SQL
surten efecto cuando se intenta la operación.
Limitaciones de los desencadenadores
CREATE TRIGGER debe ser la primera instrucción en el proceso por lotes y solo
se puede aplicar a una tabla.
Un desencadenador se crea solamente en la base de datos actual; sin embargo, un
desencadenador puede hacer referencia a objetos que están fuera de la base de datos
actual.
Si se especifica el nombre del esquema del desencadenador (para calificar el
desencadenador), califique el nombre de la tabla de la misma forma.
La misma acción del desencadenador puede definirse para más de una acción del
usuario (por ejemplo, INSERT y UPDATE) en la misma instrucción CREATE
TRIGGER.
Los desencadenadores INSTEAD OF DELETE/UPDATE no pueden definirse en
una tabla con una clave externa definida en cascada en la acción
DELETE/UPDATE.
En un desencadenador se puede especificar cualquier instrucción SET. La opción
SET seleccionada permanece en efecto durante la ejecución del desencadenador y,
después, vuelve a su configuración anterior.
Universidad Nacional de Trujillo TRIGGERS
Escuela de Ingeniería de Sistemas
8
3. Ejemplos de Triggers:
a. Usar desencadenador DML con un mensaje de aviso
El siguiente desencadenador DML imprime un mensaje en el cliente cuando alguien
intenta agregar o cambiar datos en la tabla Customer.
USE AdventureWorks2012;
GO
IFOBJECT_ID('Sales.reminder1','TR')ISNOTNULL
DROPTRIGGER Sales.reminder1;
GO
CREATETRIGGER reminder1
ONSales.Customer
AFTERINSERT,UPDATE
AS RAISERROR ('Notify Customer Relations',16,10);
GO
b. Usar un desencadenador DML con un mensaje de correo electrónico de aviso
Este ejemplo envía un mensaje de correo electrónico a una persona especificada
(MaryM) cuando cambia la tabla Customer.
USE AdventureWorks2012;
GO
IFOBJECT_ID('Sales.reminder2','TR')ISNOTNULL
DROPTRIGGER Sales.reminder2;
GO
CREATETRIGGER reminder2
ONSales.Customer
AFTERINSERT,UPDATE,DELETE
AS
EXECmsdb.dbo.sp_send_dbmail
@profile_name='AdventureWorks2012 Administrator',
@recipients ='danw@Adventure-Works.com',
@body='Don''t forget to print a report for the sales force.',
@subject='Reminder';
GO
Universidad Nacional de Trujillo TRIGGERS
Escuela de Ingeniería de Sistemas
9
c. Usar un desencadenador DML AFTER para exigir una regla de negocios entre las
tablas PurchaseOrderHeader y Vendor
El desencadenador comprueba que la solvencia del proveedor es satisfactoria
cuando se intenta insertar un nuevo pedido de compra en la tabla
PurchaseOrderHeader. Para obtener la solvencia del proveedor, debe hacerse
referencia a la tabla Vendor. Si la solvencia no es satisfactoria, se muestra un
mensaje y no se ejecuta la inserción.
USE AdventureWorks2012;
GO
IFOBJECT_ID('Purchasing.LowCredit','TR')ISNOTNULL
DROPTRIGGERPurchasing.LowCredit;
GO
--Este disparador previene una fila que se inserte en la tabla
Purchasing.PurchaseOrderHeader
--Cuando la calificación credito del proveedor especificado se establece en 5
(debajo de la media).
CREATETRIGGERPurchasing.LowCreditONPurchasing.PurchaseOrderHeader
AFTERINSERT
AS
IFEXISTS(SELECT*
FROMPurchasing.PurchaseOrderHeader p
JOIN inserted ASi
ONp.PurchaseOrderID=i.PurchaseOrderID
JOINPurchasing.VendorAS v
ONv.BusinessEntityID=p.VendorID
WHEREv.CreditRating=5
)
BEGIN
RAISERROR ('La calificación crediticia de un vendedor es demasiado bajo como
para aceptar nuevas órdenes de compra.',16,1);
ROLLBACKTRANSACTION;
RETURN
END;
GO
--Esta declaración intenta insertar una fila en la tabla PurchaseOrderHeader.
--Un proveedor que tiene una calificación crediticia inferior a la media.
--El disparador AFTER INSERT se dispara y la operación INSERT se revertirá.
INSERTINTOPurchasing.PurchaseOrderHeader(RevisionNumber,
Status,EmployeeID,
Universidad Nacional de Trujillo TRIGGERS
Escuela de Ingeniería de Sistemas
10
VendorID,ShipMethodID,OrderDate,ShipDate,SubTotal,TaxAmt, Freight)
VALUES(
2
,3
,261
,1652
,4
,GETDATE()
,GETDATE()
,44594.55
,3567.564
,1114.8638);
GO
d. Usar un desencadenador DDL con ámbito de base de datos
En el ejemplo siguiente se usa un desencadenador DDL para impedir que se quiten
sinónimos de una base de datos.
USE AdventureWorks2012;
GO
IFEXISTS(SELECT*FROMsys.triggers
WHEREparent_class=0AND name ='seguridad')
DROPTRIGGER safety
ON DATABASE;
GO
CREATETRIGGER safety
ON DATABASE
FOR DROP_SYNONYM
AS
RAISERROR ('Debe desactivar Trigger de "seguridad" para dejar sinónimos!',10,1)
ROLLBACK
GO
DROPTRIGGER safety
ON DATABASE;
GO
e. Usar un desencadenador DDL con ámbito de servidor
En el ejemplo siguiente se utiliza un desencadenador DDL para imprimir un
mensaje si se produce un evento CREATE DATABASE en la instancia actual del
servidor, y se utiliza la función EVENTDATA para recuperar el texto de la
instrucción Transact-SQL correspondiente.
IFEXISTS(SELECT*FROMsys.server_triggers
WHERE name ='ddl_trig_database')
Universidad Nacional de Trujillo TRIGGERS
Escuela de Ingeniería de Sistemas
11
DROPTRIGGERddl_trig_database
ONALL SERVER;
GO
CREATETRIGGERddl_trig_database
ONALL SERVER
FOR CREATE_DATABASE
AS
PRINT 'Database Created.'
SELECTEVENTDATA().value('(/EVENT_INSTANCE/TSQLCommand/
CommandText)[1]','nvarchar(max)')
GO
DROPTRIGGERddl_trig_database
ONALL SERVER;
GO
4. Tipo de Eventos
Insert: Se produce cuando se intenta guardar el objeto por primera vez.
Update: Se produce cuando se intenta modificar algún dato del objeto.
Delete: Se produce cuando se intenta eliminar el objeto.
Los Trigger permiten implementar reglas de gestión del lado del servidor. Los
principales usos de los triggers son los siguientes:
Calcular automáticamente el valor de una columna: por ejemplo, un trigger puede
utilizarse para calcular automáticamente un precio.
Hacer un seguimiento de las actualizaciones en la base de datos: por ejemplo, cada
vez que se elimina un artículo, un trigger registra la eliminación (quien, cuanto, que)
en una tabla de auditoria.
5. VENTAJAS Y DESVENTAJAS
A. Ventajas:
 Ofrece un mayor control sobre la Base de Datos.
Universidad Nacional de Trujillo TRIGGERS
Escuela de Ingeniería de Sistemas
12
 Fuerzan restricciones dinámicas de integridad de datos y de integridad
referencial.
 Respuesta instantánea ante eventos auditados.
 Aseguran que las operaciones relacionadas de realizan juntas de forma
implícita.
B. Desventajas:
 Un Trigger nunca se llama directamente.
 Los Triggers no se desarrollan pensando en unsolo registro, los mismos
deben funcionar enconjunto con los datos ya que se disparan por
operación y no por registro.
 Por funcionalidad, no hay que poner en uno sololas funciones de
INSERT,UPDATE y DELETE.
 Utilizar moderadamente los Triggers.
 No se pueden utilizar en tablas temporales.
6. USO
Son usados para mejorar la administración de la Base de datos, sin necesidad de
contar con que el usuario ejecute la sentencia de SQL. Además, pueden generar
valores de columnas, previene errores de datos, sincroniza tablas, modifica valores
de una vista, etc. Permite implementar programas basados en paradigma lógico
(sistemas expertos, deducción).
7. COMPONENTES PRINCIPALES:
La estructura básica de untrigger es:
Universidad Nacional de Trujillo TRIGGERS
Escuela de Ingeniería de Sistemas
13
Llamada de activación: es la sentencia que permite "disparar" el código a
ejecutar.
Restricción: es la condición necesaria para realizar el código. Esta restricción
puede ser de tipo condicional o de tipo nulidad.
Acción a ejecutar: es la secuencia de instrucciones a ejecutar una vez que se
han cumplido las condiciones iniciales.
8. TIPOS
Existen dos tipos de disparadores que se clasifican según la cantidad de ejecuciones a
realizar:
RowTriggers (o Disparadores de fila): son aquellas que se ejecutaran n-veces
si se llama n-veces desde la tabla asociada al trigger
StatementTriggers (o Disparadores de secuencia): son aquellos que sin
importar la cantidad de veces que se cumpla con la condición, su ejecución es
única.
9. EFECTOS Y CARACTERÍSTICAS
No aceptan parámetros o argumentos (pero podrían almacenar los datos afectados
en tablas temporales)
No pueden ejecutar las operaciones COMMIT o ROLLBACK por que estas son
parte de la sentencia SQL del disparador (únicamente a través de
transacciones autónomas)
Pueden causar errores de mutaciones en las tablas, si se han escrito de manera
deficiente.
No pueden ser invocados directamente; al intentar modificar los datos de una
tabla para la que se ha definido un disparador, el disparador se ejecuta
automáticamente.
No reciben y retornan parámetros.
Universidad Nacional de Trujillo TRIGGERS
Escuela de Ingeniería de Sistemas
14
Son apropiados para mantener la integridad de los datos, no para obtener
resultados de consultas.
10. ADMINISTRACIÓN DE LOS TRIGGERS
 OPERACIONES CON TRIGGERS
A. ALTER TRIGGER
Modifica la definición de un desencadenador logon, DDL o DML creado
anteriormente por una instrucción CREATE TRIGGER.
Ejemplo:
En el ejemplo siguiente se crea un desencadenador DML que imprime
para el cliente un mensaje definido por el usuario cuando un usuario
intenta agregar o cambiar los datos de la tabla SalesPersonQuotaHistory.
Después, el desencadenador se modifica utilizando ALTER TRIGGER para
aplicar el desencadenador solo en las actividades INSERT. Este
desencadenador es útil porque recuerda al usuario que actualiza o inserta
filas en esta tabla que notifique también al departamento Compensation.
USE AdventureWorks2012;
GO
IFOBJECT_ID(N'Sales.bonus_reminder', N'TR')ISNOTNULL
DROPTRIGGERSales.bonus_reminder;
GO
CREATETRIGGERSales.bonus_reminder
ONSales.SalesPersonQuotaHistory
WITH ENCRYPTION
AFTERINSERT,UPDATE
AS RAISERROR ('Notify Compensation',16,10);
GO
-- Now, change the trigger.
USE AdventureWorks2012;
GO
ALTERTRIGGERSales.bonus_reminder
ONSales.SalesPersonQuotaHistory
AFTERINSERT
AS RAISERROR ('Notify Compensation',16,10);
GO
Universidad Nacional de Trujillo TRIGGERS
Escuela de Ingeniería de Sistemas
15
B. DROP TRIGGER (Transact-SQL)
Quita uno o varios desencadenadores DML o DDL de la base de datos
actual. Puede eliminar un desencadenador DML si quita éste o quita la tabla
del desencadenador. Cuando se quita una tabla, también se quitan todos
los desencadenadores asociados.
Ejemplos:
a. Quitar un desencadenador DML:En el siguiente ejemplo se quita el
desencadenador employee_insupd.
USE AdventureWorks2012;
GO
IFOBJECT_ID('employee_insupd','TR')ISNOTNULL
DROPTRIGGERemployee_insupd;
GO
b. Quitar un desencadenador DDL: En el siguiente ejemplo se quita el
desencadenador DDL safety.
USE AdventureWorks2012;
GO
IFEXISTS(SELECT*FROMsys.triggers
WHEREparent_class=0AND name ='safety')
DROPTRIGGER safety
ON DATABASE;
GO
C. ENABLE TRIGGER (Transact-SQL)
Habilita un desencadenador DML, DDL o logon.Si se habilita un
desencadenador, éste no se vuelve a crear. Un desencadenador
deshabilitado sigue existiendo como objeto en la base de datos actual, pero
no se activa. La habilitación de un desencadenador hace que se active
cuando se ejecute cualquier instrucción Transact-SQL en que se programó
originalmente
Ejemplos:
a. Habilitar un desencadenador DML en una tabla:En el siguiente ejemplo
se deshabilita el desencadenador uAddress que se creó en la tabla
Address y, a continuación, se habilita.
Universidad Nacional de Trujillo TRIGGERS
Escuela de Ingeniería de Sistemas
16
USE AdventureWorks2012;
GO
DISABLE TRIGGERPerson.uAddressONPerson.Address;
GO
ENABLE TriggerPerson.uAddressONPerson.Address;
GO
b. Habilitar un desencadenador DDL:En el siguiente ejemplo se crea un
desencadenador DDL safety con ámbito de la base de datos y, a
continuación, se deshabilita.
IFEXISTS(SELECT*FROMsys.triggers
WHEREparent_class=0AND name ='safety')
DROPTRIGGER safety ON DATABASE;
GO
CREATETRIGGER safety
ON DATABASE
FOR DROP_TABLE, ALTER_TABLE
AS
PRINT 'Debe desactivar Trigger "de seguridad" para
eliminar o modificar las tablas!'
ROLLBACK;
GO
DISABLE TRIGGER safety ON DATABASE;
GO
ENABLE TRIGGER safety ON DATABASE;
GO
c. Habilitar todos los desencadenadores que se definieron con el mismo
ámbito
En el ejemplo siguiente se habilitan todos los desencadenadores DDL
creados en el ámbito del servidor.
USE AdventureWorks2012;
GO
ENABLE TriggerALLONALL SERVER;
GO
D. DISABLE TRIGGER (Transact-SQL)
Deshabilita un desencadenador.De forma predeterminada, los
desencadenadores se habilitan cuando se crean. Al deshabilitar un
Universidad Nacional de Trujillo TRIGGERS
Escuela de Ingeniería de Sistemas
17
desencadenador no se quita. Sigue siendo un objeto de la base de datos
actual. Sin embargo, el desencadenador no se activa cuando se ejecuta una
instrucción Transact-SQL en la que se programó
Ejemplos:
a. Deshabilitar un desencadenador DML en una tabla
En el ejemplo siguiente se deshabilita el desencadenador uAddress,
que se creó en la tabla Address.
USE AdventureWorks2012;
GO
DISABLE TRIGGERPerson.uAddressONPerson.Address;
GO
b. Deshabilitar un desencadenador DDL
En el ejemplo siguiente se crea un desencadenador DDL safety, con
ámbito en la base de datos, y después se deshabilita.
IFEXISTS(SELECT*FROMsys.triggers
WHEREparent_class=0AND name ='safety')
DROPTRIGGER safety ON DATABASE;
GO
CREATETRIGGER safety
ON DATABASE
FOR DROP_TABLE, ALTER_TABLE
AS
PRINT 'You must disable Trigger "safety" to drop or
alter tables!'
ROLLBACK;
GO
DISABLE TRIGGER safety ON DATABASE;
GO
c. Deshabilitar todos los desencadenadores que se definieron con el
mismo ámbito
En el ejemplo siguiente se deshabilitan todos los desencadenadores
DDL creados en el ámbito de servidor.
USE AdventureWorks2012;
GO
DISABLE TriggerALLONALL SERVER;
Universidad Nacional de Trujillo TRIGGERS
Escuela de Ingeniería de Sistemas
18
BIBLIOGRAFIA:
 HEURTEL, O. (2009).PHP y MySQL Domine el desarrollo Web dinamico e interactivo.
Madrid.
 http://oscarae.files.wordpress.com/2012/03/trigger.pdf
 http://es.wikipedia.org/wiki/Trigger_(base_de_datos)
 http://www.sqlserverya.com.ar/temarios/descripcion.php?cod=147&punto=141

Más contenido relacionado

La actualidad más candente

Manejo de triggers en sql server
Manejo de triggers en sql server Manejo de triggers en sql server
Manejo de triggers en sql server Dheeyi William
 
Disparadores Trigger En Sql Y My Sql
Disparadores Trigger En Sql Y My SqlDisparadores Trigger En Sql Y My Sql
Disparadores Trigger En Sql Y My Sqlguest9c891000
 
Programación MySQL-Ejercicios
Programación MySQL-EjerciciosProgramación MySQL-Ejercicios
Programación MySQL-Ejerciciostestgrupocomex
 
Triggers o disparadores
Triggers o disparadoresTriggers o disparadores
Triggers o disparadoresPablo Jose
 
TRANSACCIONES, TRIGGERS, PROCEDIMIENTOS ALMACENADOS: DB2/IBM
TRANSACCIONES, TRIGGERS, PROCEDIMIENTOS ALMACENADOS: DB2/IBM   TRANSACCIONES, TRIGGERS, PROCEDIMIENTOS ALMACENADOS: DB2/IBM
TRANSACCIONES, TRIGGERS, PROCEDIMIENTOS ALMACENADOS: DB2/IBM Kamisutra
 
Procedimientos Almacenados
Procedimientos AlmacenadosProcedimientos Almacenados
Procedimientos Almacenadosguesta403644
 
Sesión12 - Trigger (Oracle)
Sesión12 - Trigger (Oracle)Sesión12 - Trigger (Oracle)
Sesión12 - Trigger (Oracle)José Toro
 
Procedimientos_almacenados
Procedimientos_almacenadosProcedimientos_almacenados
Procedimientos_almacenadosUNACAR
 
Curso de SQL Server: implementacion (T-SQL)
Curso de SQL Server: implementacion (T-SQL)Curso de SQL Server: implementacion (T-SQL)
Curso de SQL Server: implementacion (T-SQL)Salvador Ramos
 
tutorial de Heidy SQL
tutorial de Heidy SQLtutorial de Heidy SQL
tutorial de Heidy SQLchabalma
 
Otros Objetos de Esquemas Z051 Cap 12
Otros Objetos de Esquemas Z051 Cap 12Otros Objetos de Esquemas Z051 Cap 12
Otros Objetos de Esquemas Z051 Cap 12Alexander Calderón
 
Java con base de datos
Java con base de datosJava con base de datos
Java con base de datosALYTS
 
Semana 12 y 13 subprogramas triggers
Semana 12 y 13 subprogramas triggersSemana 12 y 13 subprogramas triggers
Semana 12 y 13 subprogramas triggersvictdiazm
 

La actualidad más candente (20)

Manejo de triggers en sql server
Manejo de triggers en sql server Manejo de triggers en sql server
Manejo de triggers en sql server
 
Disparadores Trigger En Sql Y My Sql
Disparadores Trigger En Sql Y My SqlDisparadores Trigger En Sql Y My Sql
Disparadores Trigger En Sql Y My Sql
 
Programación MySQL-Ejercicios
Programación MySQL-EjerciciosProgramación MySQL-Ejercicios
Programación MySQL-Ejercicios
 
Disparadores
DisparadoresDisparadores
Disparadores
 
Triggers o disparadores
Triggers o disparadoresTriggers o disparadores
Triggers o disparadores
 
TRANSACCIONES, TRIGGERS, PROCEDIMIENTOS ALMACENADOS: DB2/IBM
TRANSACCIONES, TRIGGERS, PROCEDIMIENTOS ALMACENADOS: DB2/IBM   TRANSACCIONES, TRIGGERS, PROCEDIMIENTOS ALMACENADOS: DB2/IBM
TRANSACCIONES, TRIGGERS, PROCEDIMIENTOS ALMACENADOS: DB2/IBM
 
Triggers
TriggersTriggers
Triggers
 
Procedimientos Almacenados
Procedimientos AlmacenadosProcedimientos Almacenados
Procedimientos Almacenados
 
Sesión12 - Trigger (Oracle)
Sesión12 - Trigger (Oracle)Sesión12 - Trigger (Oracle)
Sesión12 - Trigger (Oracle)
 
Procedimientos almacenados en MySQL
Procedimientos almacenados en MySQLProcedimientos almacenados en MySQL
Procedimientos almacenados en MySQL
 
Herramientas Bd
Herramientas BdHerramientas Bd
Herramientas Bd
 
Procedimientos_almacenados
Procedimientos_almacenadosProcedimientos_almacenados
Procedimientos_almacenados
 
Curso de SQL Server: implementacion (T-SQL)
Curso de SQL Server: implementacion (T-SQL)Curso de SQL Server: implementacion (T-SQL)
Curso de SQL Server: implementacion (T-SQL)
 
San triggers
San triggersSan triggers
San triggers
 
TRIGGERS
TRIGGERSTRIGGERS
TRIGGERS
 
Postgres trigger
Postgres triggerPostgres trigger
Postgres trigger
 
tutorial de Heidy SQL
tutorial de Heidy SQLtutorial de Heidy SQL
tutorial de Heidy SQL
 
Otros Objetos de Esquemas Z051 Cap 12
Otros Objetos de Esquemas Z051 Cap 12Otros Objetos de Esquemas Z051 Cap 12
Otros Objetos de Esquemas Z051 Cap 12
 
Java con base de datos
Java con base de datosJava con base de datos
Java con base de datos
 
Semana 12 y 13 subprogramas triggers
Semana 12 y 13 subprogramas triggersSemana 12 y 13 subprogramas triggers
Semana 12 y 13 subprogramas triggers
 

Destacado

Presentacio Sql 1
Presentacio Sql 1Presentacio Sql 1
Presentacio Sql 1Martink137
 
Disparadores Trigger En Sql Y My Sql
Disparadores Trigger En Sql Y My SqlDisparadores Trigger En Sql Y My Sql
Disparadores Trigger En Sql Y My Sqlyareli
 
Presentacion Sql 2
Presentacion Sql 2Presentacion Sql 2
Presentacion Sql 2Martink137
 
MANUAL COMPLETO DE SQL
MANUAL COMPLETO DE SQLMANUAL COMPLETO DE SQL
MANUAL COMPLETO DE SQLEdgar Sandoval
 

Destacado (6)

Plsql
PlsqlPlsql
Plsql
 
Presentacio Sql 1
Presentacio Sql 1Presentacio Sql 1
Presentacio Sql 1
 
Disparadores Trigger En Sql Y My Sql
Disparadores Trigger En Sql Y My SqlDisparadores Trigger En Sql Y My Sql
Disparadores Trigger En Sql Y My Sql
 
Presentacion Sql 2
Presentacion Sql 2Presentacion Sql 2
Presentacion Sql 2
 
Ejercicios sql
Ejercicios sqlEjercicios sql
Ejercicios sql
 
MANUAL COMPLETO DE SQL
MANUAL COMPLETO DE SQLMANUAL COMPLETO DE SQL
MANUAL COMPLETO DE SQL
 

Similar a TRIGGERS Cliente - servidor (20)

Bd L8 Eq9 Pre Rosa Triggers
Bd L8 Eq9 Pre Rosa TriggersBd L8 Eq9 Pre Rosa Triggers
Bd L8 Eq9 Pre Rosa Triggers
 
Disparadores
DisparadoresDisparadores
Disparadores
 
Disparadores
DisparadoresDisparadores
Disparadores
 
Disparadores
DisparadoresDisparadores
Disparadores
 
Trabajo grupal - Base de Datos
Trabajo grupal - Base de DatosTrabajo grupal - Base de Datos
Trabajo grupal - Base de Datos
 
TRIGGERS O DISPARADORES
TRIGGERS O DISPARADORESTRIGGERS O DISPARADORES
TRIGGERS O DISPARADORES
 
TRIGGERS-ACTIVADORES
TRIGGERS-ACTIVADORESTRIGGERS-ACTIVADORES
TRIGGERS-ACTIVADORES
 
TRIGGER-ACTIVADORES
TRIGGER-ACTIVADORESTRIGGER-ACTIVADORES
TRIGGER-ACTIVADORES
 
Manualitosqlserver
ManualitosqlserverManualitosqlserver
Manualitosqlserver
 
Disparadores - base de datos
Disparadores - base de datosDisparadores - base de datos
Disparadores - base de datos
 
Disparadores 1213820550525607-9
Disparadores 1213820550525607-9Disparadores 1213820550525607-9
Disparadores 1213820550525607-9
 
Transacciones y sql procedural EN MySQL
Transacciones y sql procedural EN MySQLTransacciones y sql procedural EN MySQL
Transacciones y sql procedural EN MySQL
 
Manual
ManualManual
Manual
 
Ms SQL Server
Ms SQL ServerMs SQL Server
Ms SQL Server
 
Manual basico de_oracle
Manual basico de_oracleManual basico de_oracle
Manual basico de_oracle
 
Manejo Control De Datos
Manejo Control De DatosManejo Control De Datos
Manejo Control De Datos
 
Lenguaje transact sql
Lenguaje transact sqlLenguaje transact sql
Lenguaje transact sql
 
Transac sq ll
Transac sq llTransac sq ll
Transac sq ll
 
Disparadores.pptx
Disparadores.pptxDisparadores.pptx
Disparadores.pptx
 
Triggr
TriggrTriggr
Triggr
 

TRIGGERS Cliente - servidor

  • 1. UNIVERSIDAD NACIONAL DE TRUJILLO FACULTAD DE INGENIERÍA E.A.P. Ingeniería de Sistemas Sede Valle Jequetepeque TRIGGER Integrantes: MACHUCA CRUZADO, ARMANDO VASQUEZ HUAMAN, OSCAR VARGAS LEON, LUIS ZÚÑIGA CERDÁN, JORGE LUIS. Asesor Metodológico: ING. JOSE FERNANDEZ MURRUGARRA. GUADALUPE, PERÚ 2013
  • 2. INDICE TRIGGERS ......................................................................................................................................... 3 1. DEFINICIÓN.............................................................................................................................. 3 a. Sintaxis........................................................................................................................................ 4 Limitaciones de los desencadenadores.................................................................................. 7 Ejemplos de Triggers: ............................................................................................................. 8 l. Tipo de Eventos......................................................................................................................... 11 3. VENTAJAS Y DESVENTAJAS.............................................................................................. 11 A. Ventajas:.................................................................................................................................... 11 B. Desventajas: .............................................................................................................................. 12 4. USO........................................................................................................................................... 12 5. COMPONENTES PRINCIPALES:.......................................................................................... 12 6. TIPOS........................................................................................................................................ 13 7. EFECTOS Y CARACTERÍSTICAS ........................................................................................ 13 8. ADMINISTRACIÓN DE LOS TRIGGERS............................................................................. 14  OPERACIONES CON TRIGGERS .............................................................................................. 14 A. ALTER TRIGGER.......................................................................................................................... 14 B. DROP TRIGGER (Transact-SQL).................................................................................................. 15 C. ENABLE TRIGGER (Transact-SQL) .............................................................................................. 15 D. DISABLE TRIGGER (Transact-SQL).............................................................................................. 16
  • 3. Universidad Nacional de Trujillo TRIGGERS Escuela de Ingeniería de Sistemas 3 TRIGGERS 1. DEFINICIÓN Un trigger (o disparador) en una Base de datos, es un procedimiento que se ejecuta cuando se cumple una condición establecida al realizar una operación. Dependiendo de la base de datos, los triggers pueden ser de inserción (INSERT), actualización (UPDATE) o borrado (DELETE). Algunas bases de datos pueden ejecutar triggers al crear, borrar o editar usuarios, tablas, bases de datos u otros objetos. Son usados para mejorar la administración de la Base de datos, sin necesidad de contar con que el usuario ejecute la sentencia de SQL. Además, pueden generar valores de columnas, previene errores de datos, sincroniza tablas, modifica valores de una vista, etc. Permite implementar programas basados en paradigma lógico (sistemas expertos, deducción). 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 para la que se ha definido 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. Los desencadenadores DML se ejecutan cuando un usuario intenta modificar datos mediante un evento de lenguaje de manipulación de datos (DML). Los eventos DML son instrucciones INSERT, UPDATE o DELETE de una tabla o vista. Estos desencadenadores se activan cuando se desencadena cualquier evento válido, con independencia de que las filas de la tabla se vean o no afectadas.
  • 4. Universidad Nacional de Trujillo TRIGGERS Escuela de Ingeniería de Sistemas 4 Los desencadenadores DDL se ejecutan como respuesta a diversos eventos del lenguaje de definición de datos (DDL). Estos eventos corresponden principalmente a instrucciones CREATE, ALTER y DROP de Transact-SQL, y a determinados procedimientos almacenados del sistema que ejecutan operaciones de tipo DDL. a. Sintaxis Trigger DML CREATETRIGGER[schema_name.]trigger_name ON{table|view} [WITH<dml_trigger_option>[,...n ]] {FOR|AFTER| INSTEAD OF} {[INSERT][,][UPDATE][,][DELETE]} [NOTFOR REPLICATION ] AS{sql_statement[;][,...n ]|EXTERNAL NAME <method specifier[;]>} <dml_trigger_option>::= [ ENCRYPTION] [EXECUTEAS Clause ] <method_specifier>::= assembly_name.class_name.method_name -- Trigger DDL CREATETRIGGERtrigger_name ON{ALL SERVER | DATABASE } [WITH<ddl_trigger_option>[,...n ]] {FOR|AFTER}{event_type|event_group}[,...n ] AS{sql_statement[;][,...n ]|EXTERNAL NAME < method specifier>[;]} <ddl_trigger_option>::= [ ENCRYPTION] [EXECUTEAS Clause ]
  • 5. Universidad Nacional de Trujillo TRIGGERS Escuela de Ingeniería de Sistemas 5 2. ARGUMENTOS a. SCHEMA_NAME Es el nombre del esquema al que pertenece un desencadenador DML. Los desencadenadores DML tienen como ámbito el esquema de la tabla o la vista donde se crean. schema_name no se puede especificar para los desencadenadores DDL o LOGON. b. TRIGGER_NAME Es el nombre del desencadenador. El parámetro trigger_name debe cumplir con las reglas de los identificadores, con la excepción de que trigger_name no puede comenzar con los símbolos # o ##. c. TABLE | VIEW Es la tabla o vista en que se ejecuta el desencadenador DML; algunas veces se denomina tabla del desencadenador o vista del desencadenador. Especificar el nombre completo de la tabla o vista es opcional. Solo se puede hacer referencia a una vista mediante un desencadenador INSTEAD OF. No es posible definir desencadenadores DML en tablas temporales locales o globales. d. DATABASE Aplica el ámbito de un desencadenador DDL a la base de datos actual. Si se especifica, el desencadenador se activa cada vez que event_type o event_group tienen lugar en la base de datos actual. e. ALL SERVER Aplica el ámbito de un desencadenador DDL o logon al servidor actual. Si se especifica, el desencadenador se activa cada vez que event_type o event_group tienen lugar en la base de datos actual. f. WITH ENCRYPTION Ofusca el texto de la instrucción CREATE TRIGGER. El uso de WITH ENCRYPTION impide que el desencadenador se publique como parte de la replicación de SQL Server. WITH ENCRYPTION no se puede especificar para desencadenadores CLR. g. EXECUTE AS Especifica el contexto de seguridad en el que se ejecuta el desencadenador. Permite controlar qué cuenta de usuario utiliza la instancia de SQL Server para validar los
  • 6. Universidad Nacional de Trujillo TRIGGERS Escuela de Ingeniería de Sistemas 6 permisos sobre cualquier objeto de base de datos al que haga referencia el desencadenador. Para obtener más información, vea EXECUTE AS (cláusula de Transact-SQL). h. FOR | AFTER AFTER específica que el desencadenador DML solo se activa cuando todas las operaciones especificadas en la instrucción SQL desencadenadora se han ejecutado correctamente. Además, todas las acciones referenciales en cascada y las comprobaciones de restricciones deben ser correctas para que este desencadenador se ejecute. AFTER es el valor predeterminado cuando solo se especifica la palabra clave FOR. Los desencadenadores AFTER no se pueden definir en las vistas. i. INSTEAD OF Especifica que se ejecuta el desencadenador DML en vez de la instrucción SQL desencadenadora, por lo que se suplantan las acciones de las instrucciones desencadenadoras. INSTEAD OF no se puede especificar para los desencadenadores DDL o logon. Como máximo, se puede definir un desencadenador INSTEAD OF por cada instrucción INSERT, UPDATE o DELETE en cada tabla o vista. No obstante, en las vistas es posible definir otras vistas que tengan su propio desencadenador INSTEAD OF. Los desencadenadores INSTEAD OF no se permiten en vistas actualizables que usan WITH CHECK OPTION. SQL Server genera un error cuando se agrega un desencadenador INSTEAD OF a una vista actualizable para la que se especificó WITH CHECK OPTION. El usuario debe quitar esta opción mediante ALTER VIEW antes de definir el desencadenador INSTEAD OF. j. { [ DELETE ] [ , ] [ INSERT ] [ , ] [ UPDATE ] } Especifica las instrucciones de modificación de datos que activan el desencadenador DML cuando se intenta en esta tabla o vista. Se debe especificar al menos una opción. En la definición del desencadenador se permite cualquier combinación de estas opciones, en cualquier orden. Para los desencadenadores INSTEAD OF, no se permite la opción DELETE en tablas que tengan una relación de integridad referencial que especifica una acción ON DELETE en cascada. Igualmente, no se permite la opción UPDATE en tablas que tengan una relación de integridad referencial que especifica una acción ON UPDATE en cascada.
  • 7. Universidad Nacional de Trujillo TRIGGERS Escuela de Ingeniería de Sistemas 7 k. SQL_STATEMENT Son las condiciones y acciones del desencadenador. Las condiciones del desencadenador especifican los criterios adicionales que determinan si los intentos de los eventos DML, DDL o logon hacen que se lleven a cabo las acciones del desencadenador. Las acciones del desencadenador especificadas en las instrucciones Transact-SQL surten efecto cuando se intenta la operación. Limitaciones de los desencadenadores CREATE TRIGGER debe ser la primera instrucción en el proceso por lotes y solo se puede aplicar a una tabla. Un desencadenador se crea solamente en la base de datos actual; sin embargo, un desencadenador puede hacer referencia a objetos que están fuera de la base de datos actual. Si se especifica el nombre del esquema del desencadenador (para calificar el desencadenador), califique el nombre de la tabla de la misma forma. La misma acción del desencadenador puede definirse para más de una acción del usuario (por ejemplo, INSERT y UPDATE) en la misma instrucción CREATE TRIGGER. Los desencadenadores INSTEAD OF DELETE/UPDATE no pueden definirse en una tabla con una clave externa definida en cascada en la acción DELETE/UPDATE. En un desencadenador se puede especificar cualquier instrucción SET. La opción SET seleccionada permanece en efecto durante la ejecución del desencadenador y, después, vuelve a su configuración anterior.
  • 8. Universidad Nacional de Trujillo TRIGGERS Escuela de Ingeniería de Sistemas 8 3. Ejemplos de Triggers: a. Usar desencadenador DML con un mensaje de aviso El siguiente desencadenador DML imprime un mensaje en el cliente cuando alguien intenta agregar o cambiar datos en la tabla Customer. USE AdventureWorks2012; GO IFOBJECT_ID('Sales.reminder1','TR')ISNOTNULL DROPTRIGGER Sales.reminder1; GO CREATETRIGGER reminder1 ONSales.Customer AFTERINSERT,UPDATE AS RAISERROR ('Notify Customer Relations',16,10); GO b. Usar un desencadenador DML con un mensaje de correo electrónico de aviso Este ejemplo envía un mensaje de correo electrónico a una persona especificada (MaryM) cuando cambia la tabla Customer. USE AdventureWorks2012; GO IFOBJECT_ID('Sales.reminder2','TR')ISNOTNULL DROPTRIGGER Sales.reminder2; GO CREATETRIGGER reminder2 ONSales.Customer AFTERINSERT,UPDATE,DELETE AS EXECmsdb.dbo.sp_send_dbmail @profile_name='AdventureWorks2012 Administrator', @recipients ='danw@Adventure-Works.com', @body='Don''t forget to print a report for the sales force.', @subject='Reminder'; GO
  • 9. Universidad Nacional de Trujillo TRIGGERS Escuela de Ingeniería de Sistemas 9 c. Usar un desencadenador DML AFTER para exigir una regla de negocios entre las tablas PurchaseOrderHeader y Vendor El desencadenador comprueba que la solvencia del proveedor es satisfactoria cuando se intenta insertar un nuevo pedido de compra en la tabla PurchaseOrderHeader. Para obtener la solvencia del proveedor, debe hacerse referencia a la tabla Vendor. Si la solvencia no es satisfactoria, se muestra un mensaje y no se ejecuta la inserción. USE AdventureWorks2012; GO IFOBJECT_ID('Purchasing.LowCredit','TR')ISNOTNULL DROPTRIGGERPurchasing.LowCredit; GO --Este disparador previene una fila que se inserte en la tabla Purchasing.PurchaseOrderHeader --Cuando la calificación credito del proveedor especificado se establece en 5 (debajo de la media). CREATETRIGGERPurchasing.LowCreditONPurchasing.PurchaseOrderHeader AFTERINSERT AS IFEXISTS(SELECT* FROMPurchasing.PurchaseOrderHeader p JOIN inserted ASi ONp.PurchaseOrderID=i.PurchaseOrderID JOINPurchasing.VendorAS v ONv.BusinessEntityID=p.VendorID WHEREv.CreditRating=5 ) BEGIN RAISERROR ('La calificación crediticia de un vendedor es demasiado bajo como para aceptar nuevas órdenes de compra.',16,1); ROLLBACKTRANSACTION; RETURN END; GO --Esta declaración intenta insertar una fila en la tabla PurchaseOrderHeader. --Un proveedor que tiene una calificación crediticia inferior a la media. --El disparador AFTER INSERT se dispara y la operación INSERT se revertirá. INSERTINTOPurchasing.PurchaseOrderHeader(RevisionNumber, Status,EmployeeID,
  • 10. Universidad Nacional de Trujillo TRIGGERS Escuela de Ingeniería de Sistemas 10 VendorID,ShipMethodID,OrderDate,ShipDate,SubTotal,TaxAmt, Freight) VALUES( 2 ,3 ,261 ,1652 ,4 ,GETDATE() ,GETDATE() ,44594.55 ,3567.564 ,1114.8638); GO d. Usar un desencadenador DDL con ámbito de base de datos En el ejemplo siguiente se usa un desencadenador DDL para impedir que se quiten sinónimos de una base de datos. USE AdventureWorks2012; GO IFEXISTS(SELECT*FROMsys.triggers WHEREparent_class=0AND name ='seguridad') DROPTRIGGER safety ON DATABASE; GO CREATETRIGGER safety ON DATABASE FOR DROP_SYNONYM AS RAISERROR ('Debe desactivar Trigger de "seguridad" para dejar sinónimos!',10,1) ROLLBACK GO DROPTRIGGER safety ON DATABASE; GO e. Usar un desencadenador DDL con ámbito de servidor En el ejemplo siguiente se utiliza un desencadenador DDL para imprimir un mensaje si se produce un evento CREATE DATABASE en la instancia actual del servidor, y se utiliza la función EVENTDATA para recuperar el texto de la instrucción Transact-SQL correspondiente. IFEXISTS(SELECT*FROMsys.server_triggers WHERE name ='ddl_trig_database')
  • 11. Universidad Nacional de Trujillo TRIGGERS Escuela de Ingeniería de Sistemas 11 DROPTRIGGERddl_trig_database ONALL SERVER; GO CREATETRIGGERddl_trig_database ONALL SERVER FOR CREATE_DATABASE AS PRINT 'Database Created.' SELECTEVENTDATA().value('(/EVENT_INSTANCE/TSQLCommand/ CommandText)[1]','nvarchar(max)') GO DROPTRIGGERddl_trig_database ONALL SERVER; GO 4. Tipo de Eventos Insert: Se produce cuando se intenta guardar el objeto por primera vez. Update: Se produce cuando se intenta modificar algún dato del objeto. Delete: Se produce cuando se intenta eliminar el objeto. Los Trigger permiten implementar reglas de gestión del lado del servidor. Los principales usos de los triggers son los siguientes: Calcular automáticamente el valor de una columna: por ejemplo, un trigger puede utilizarse para calcular automáticamente un precio. Hacer un seguimiento de las actualizaciones en la base de datos: por ejemplo, cada vez que se elimina un artículo, un trigger registra la eliminación (quien, cuanto, que) en una tabla de auditoria. 5. VENTAJAS Y DESVENTAJAS A. Ventajas:  Ofrece un mayor control sobre la Base de Datos.
  • 12. Universidad Nacional de Trujillo TRIGGERS Escuela de Ingeniería de Sistemas 12  Fuerzan restricciones dinámicas de integridad de datos y de integridad referencial.  Respuesta instantánea ante eventos auditados.  Aseguran que las operaciones relacionadas de realizan juntas de forma implícita. B. Desventajas:  Un Trigger nunca se llama directamente.  Los Triggers no se desarrollan pensando en unsolo registro, los mismos deben funcionar enconjunto con los datos ya que se disparan por operación y no por registro.  Por funcionalidad, no hay que poner en uno sololas funciones de INSERT,UPDATE y DELETE.  Utilizar moderadamente los Triggers.  No se pueden utilizar en tablas temporales. 6. USO Son usados para mejorar la administración de la Base de datos, sin necesidad de contar con que el usuario ejecute la sentencia de SQL. Además, pueden generar valores de columnas, previene errores de datos, sincroniza tablas, modifica valores de una vista, etc. Permite implementar programas basados en paradigma lógico (sistemas expertos, deducción). 7. COMPONENTES PRINCIPALES: La estructura básica de untrigger es:
  • 13. Universidad Nacional de Trujillo TRIGGERS Escuela de Ingeniería de Sistemas 13 Llamada de activación: es la sentencia que permite "disparar" el código a ejecutar. Restricción: es la condición necesaria para realizar el código. Esta restricción puede ser de tipo condicional o de tipo nulidad. Acción a ejecutar: es la secuencia de instrucciones a ejecutar una vez que se han cumplido las condiciones iniciales. 8. TIPOS Existen dos tipos de disparadores que se clasifican según la cantidad de ejecuciones a realizar: RowTriggers (o Disparadores de fila): son aquellas que se ejecutaran n-veces si se llama n-veces desde la tabla asociada al trigger StatementTriggers (o Disparadores de secuencia): son aquellos que sin importar la cantidad de veces que se cumpla con la condición, su ejecución es única. 9. EFECTOS Y CARACTERÍSTICAS No aceptan parámetros o argumentos (pero podrían almacenar los datos afectados en tablas temporales) No pueden ejecutar las operaciones COMMIT o ROLLBACK por que estas son parte de la sentencia SQL del disparador (únicamente a través de transacciones autónomas) Pueden causar errores de mutaciones en las tablas, si se han escrito de manera deficiente. No pueden ser invocados directamente; al intentar modificar los datos de una tabla para la que se ha definido un disparador, el disparador se ejecuta automáticamente. No reciben y retornan parámetros.
  • 14. Universidad Nacional de Trujillo TRIGGERS Escuela de Ingeniería de Sistemas 14 Son apropiados para mantener la integridad de los datos, no para obtener resultados de consultas. 10. ADMINISTRACIÓN DE LOS TRIGGERS  OPERACIONES CON TRIGGERS A. ALTER TRIGGER Modifica la definición de un desencadenador logon, DDL o DML creado anteriormente por una instrucción CREATE TRIGGER. Ejemplo: En el ejemplo siguiente se crea un desencadenador DML que imprime para el cliente un mensaje definido por el usuario cuando un usuario intenta agregar o cambiar los datos de la tabla SalesPersonQuotaHistory. Después, el desencadenador se modifica utilizando ALTER TRIGGER para aplicar el desencadenador solo en las actividades INSERT. Este desencadenador es útil porque recuerda al usuario que actualiza o inserta filas en esta tabla que notifique también al departamento Compensation. USE AdventureWorks2012; GO IFOBJECT_ID(N'Sales.bonus_reminder', N'TR')ISNOTNULL DROPTRIGGERSales.bonus_reminder; GO CREATETRIGGERSales.bonus_reminder ONSales.SalesPersonQuotaHistory WITH ENCRYPTION AFTERINSERT,UPDATE AS RAISERROR ('Notify Compensation',16,10); GO -- Now, change the trigger. USE AdventureWorks2012; GO ALTERTRIGGERSales.bonus_reminder ONSales.SalesPersonQuotaHistory AFTERINSERT AS RAISERROR ('Notify Compensation',16,10); GO
  • 15. Universidad Nacional de Trujillo TRIGGERS Escuela de Ingeniería de Sistemas 15 B. DROP TRIGGER (Transact-SQL) Quita uno o varios desencadenadores DML o DDL de la base de datos actual. Puede eliminar un desencadenador DML si quita éste o quita la tabla del desencadenador. Cuando se quita una tabla, también se quitan todos los desencadenadores asociados. Ejemplos: a. Quitar un desencadenador DML:En el siguiente ejemplo se quita el desencadenador employee_insupd. USE AdventureWorks2012; GO IFOBJECT_ID('employee_insupd','TR')ISNOTNULL DROPTRIGGERemployee_insupd; GO b. Quitar un desencadenador DDL: En el siguiente ejemplo se quita el desencadenador DDL safety. USE AdventureWorks2012; GO IFEXISTS(SELECT*FROMsys.triggers WHEREparent_class=0AND name ='safety') DROPTRIGGER safety ON DATABASE; GO C. ENABLE TRIGGER (Transact-SQL) Habilita un desencadenador DML, DDL o logon.Si se habilita un desencadenador, éste no se vuelve a crear. Un desencadenador deshabilitado sigue existiendo como objeto en la base de datos actual, pero no se activa. La habilitación de un desencadenador hace que se active cuando se ejecute cualquier instrucción Transact-SQL en que se programó originalmente Ejemplos: a. Habilitar un desencadenador DML en una tabla:En el siguiente ejemplo se deshabilita el desencadenador uAddress que se creó en la tabla Address y, a continuación, se habilita.
  • 16. Universidad Nacional de Trujillo TRIGGERS Escuela de Ingeniería de Sistemas 16 USE AdventureWorks2012; GO DISABLE TRIGGERPerson.uAddressONPerson.Address; GO ENABLE TriggerPerson.uAddressONPerson.Address; GO b. Habilitar un desencadenador DDL:En el siguiente ejemplo se crea un desencadenador DDL safety con ámbito de la base de datos y, a continuación, se deshabilita. IFEXISTS(SELECT*FROMsys.triggers WHEREparent_class=0AND name ='safety') DROPTRIGGER safety ON DATABASE; GO CREATETRIGGER safety ON DATABASE FOR DROP_TABLE, ALTER_TABLE AS PRINT 'Debe desactivar Trigger "de seguridad" para eliminar o modificar las tablas!' ROLLBACK; GO DISABLE TRIGGER safety ON DATABASE; GO ENABLE TRIGGER safety ON DATABASE; GO c. Habilitar todos los desencadenadores que se definieron con el mismo ámbito En el ejemplo siguiente se habilitan todos los desencadenadores DDL creados en el ámbito del servidor. USE AdventureWorks2012; GO ENABLE TriggerALLONALL SERVER; GO D. DISABLE TRIGGER (Transact-SQL) Deshabilita un desencadenador.De forma predeterminada, los desencadenadores se habilitan cuando se crean. Al deshabilitar un
  • 17. Universidad Nacional de Trujillo TRIGGERS Escuela de Ingeniería de Sistemas 17 desencadenador no se quita. Sigue siendo un objeto de la base de datos actual. Sin embargo, el desencadenador no se activa cuando se ejecuta una instrucción Transact-SQL en la que se programó Ejemplos: a. Deshabilitar un desencadenador DML en una tabla En el ejemplo siguiente se deshabilita el desencadenador uAddress, que se creó en la tabla Address. USE AdventureWorks2012; GO DISABLE TRIGGERPerson.uAddressONPerson.Address; GO b. Deshabilitar un desencadenador DDL En el ejemplo siguiente se crea un desencadenador DDL safety, con ámbito en la base de datos, y después se deshabilita. IFEXISTS(SELECT*FROMsys.triggers WHEREparent_class=0AND name ='safety') DROPTRIGGER safety ON DATABASE; GO CREATETRIGGER safety ON DATABASE FOR DROP_TABLE, ALTER_TABLE AS PRINT 'You must disable Trigger "safety" to drop or alter tables!' ROLLBACK; GO DISABLE TRIGGER safety ON DATABASE; GO c. Deshabilitar todos los desencadenadores que se definieron con el mismo ámbito En el ejemplo siguiente se deshabilitan todos los desencadenadores DDL creados en el ámbito de servidor. USE AdventureWorks2012; GO DISABLE TriggerALLONALL SERVER;
  • 18. Universidad Nacional de Trujillo TRIGGERS Escuela de Ingeniería de Sistemas 18 BIBLIOGRAFIA:  HEURTEL, O. (2009).PHP y MySQL Domine el desarrollo Web dinamico e interactivo. Madrid.  http://oscarae.files.wordpress.com/2012/03/trigger.pdf  http://es.wikipedia.org/wiki/Trigger_(base_de_datos)  http://www.sqlserverya.com.ar/temarios/descripcion.php?cod=147&punto=141