Sei sulla pagina 1di 5

Sesin12 TRANSACTIONSQLSERVER

1 Ing.LeticiaMarisolLauraOchoa



Disparadores DML



I. OBJETIVOS
Definir los disparadores DML
Crear disparadores INSERT, DELETE, UPDATE e INSTEAD OF

II. TEMAS A TRATAR
Disparadores
Creacin de disparadores
Tipos de disparadores

III. MARCO TERICO

1. DISPARADORES (TRIGGERS)

Los disparadores del Lenguaje de manipulacin de datos (DML) son una herramienta muy eficaz que
le permite exigir integridad de datos de dominio, de entidad y referencial.

Un desencadenador o disparador es un tipo especial de procedimiento almacenado que se ejecuta
cuando una instruccin INSERT, UPDATE o DELETE modifica los datos de una tabla especificada.
Un desencadenador puede consultar otras tablas y puede incluir instrucciones Transact-SQL
complejas. Los desencadenadores se crean normalmente para exigir integridad referencial o
coherencia entre datos relacionados de forma lgica en tablas diferentes. Puede utilizar
desencadenadores para exigir lgica de negocios compleja que sea difcil o imposible de exigir
mediante otros mecanismos de integridad de datos.

Tenga en cuenta lo siguiente acerca de los desencadenadores:
El desencadenador y la instruccin que lo activa se tratan como una nica transaccin, que se
puede deshacer desde dentro del desencadenador. Si se detecta un error grave (por ejemplo,
espacio insuficiente en el disco) se deshace automticamente toda la transaccin.
Los desencadenadores pueden realizar cambios en cascada en tablas relacionadas de la base
de datos; sin embargo, estos cambios se pueden ejecutar de manera ms eficiente mediante el
uso de restricciones de integridad referencial en cascada.
Los desencadenadores pueden proteger frente a operaciones de insercin, actualizacin y
eliminacin malintencionadas o incorrectas, y pueden exigir otras restricciones ms complejas
que las definidas mediante restricciones CHECK.
Los desencadenadores pueden hacer referencia a columnas de otras tablas, a diferencia de las
restricciones CHECK. Por ejemplo, un desencadenador puede utilizar una instruccin SELECT
de otra tabla para comparar con los datos insertados o actualizados y realizar acciones
adicionales, como modificar los datos o mostrar un mensaje de error definido por el usuario.
Los desencadenadores pueden evaluar el estado de una tabla antes y despus de una
modificacin de datos, y realizar acciones basndose en esa diferencia.
Varios desencadenadores del mismo tipo (INSERT, UPDATE o DELETE) en una tabla permiten
realizar distintas acciones como respuesta a la misma instruccin de modificacin.

S SE ES SI I N N
1
1
2
2
Sesin12 TRANSACTIONSQLSERVER

2 Ing.LeticiaMarisolLauraOchoa

2. CREACION DE DISPARADORES

Puede crear disparadores mediante la instruccin CREATE TRIGGER de Transact-SQL. La
instruccin CREATE TRIGGER tiene la siguiente sintaxis:

CREATE TRI GGER [ nombr eDeEsquema . ] nombr eDeDi spar ador
ON { t abl e | vi ew }
[ WI TH <opci nDi spar ador Dml > [ , . . . n ] ]
{ FOR | AFTER | I NSTEAD OF }
{ [ I NSERT ] [ , ] [ UPDATE ] [ , ] [ DELETE ] }
[ WI TH APPEND ]
[ NOT FOR REPLI CATI ON ]
AS { i nst r ucci nSql [ ; ] [ . . . n ] | EXTERNAL NAME
<especi f i cador DeMt odo
[ ; ] > }

3. TIPOS DE DISPARADORES

Hay dos categoras de disparadores DML:

Disparadores AFTER: Los disparadores AFTER se ejecutan despus de realizarse la accin de
la instruccin INSERT, UPDATE o DELETE. Especificar AFTER es igual que especificar FOR,
que es la nica opcin disponible en las versiones anteriores de Microsoft SQL Server. Slo
puede definir disparadores AFTER en tablas.

Disparadores INSTEAD OF: Los disparadores INSTEAD OF se ejecutan en lugar de la accin
de desencadenamiento habitual. Los desencadenadores INSTEAD OF tambin pueden definirse
en vistas con una o ms tablas base, donde pueden extender los tipos de actualizaciones que
una vista puede aceptar.

IV. ACTIVIDADES

Crear un disparador INSERT, UPDATE, DELETE

1. Haga clic en el botn New Query de la barra de herramientas
2. En la ventana de nueva consulta en blanco, escriba el siguiente cdigo de Transact-SQL:

Sesin12 TRANSACTIONSQLSERVER

3 Ing.LeticiaMarisolLauraOchoa

3. En la barra de herramientas, haga clic en el botn Execute


4. Cuando el comando haya finalizado correctamente, verificamos en el explorador de
objetos la creacin de las tablas dbo.Employee y dbo.AuditEmployee. Expanda
Databases, AdventureWorks, Tables. Si no aparecen, hacemos clic derecho sobre
Tables y seleccionamos Refresh
5. En la ventana de nueva consulta en blanco, escriba y ejecute el siguiente cdigo de Transact-
SQL:


6. Cuando el comando haya finalizado correctamente, haga clic con el botn derecho del
mouse en la carpeta Triggers del Explorador de objetos y, a continuacin, haga clic en
Refresh para comprobar que se ha creado el disparador triAudit
7. Inserte cuatro registros en la tabla dbo.Employee

8. Actualice el nombre del empleado de cdigo 2 con el siguiente valor: Mario Perea


Sesin12 TRANSACTIONSQLSERVER

4 Ing.LeticiaMarisolLauraOchoa

9. Elimine el registro del empleado de cdigo 1



10. Revise el contenido de las tablas dbo.Employee y dbo.AuditEmployee


Crear un disparador DELETE

1. Haga clic en el botn New Query de la barra de herramientas
2. En la ventana de nueva consulta en blanco, escriba el siguiente cdigo de Transact-SQL:


3. En la barra de herramientas, haga clic en el botn Execute
4. Cuando el comando haya finalizado correctamente, verificamos en el explorador de objetos la
creacin de la tabla HumanResources.JobCandidateHistory. Expanda Databases,
AdventureWorks, Tables. Si no aparecen, hacemos clic derecho sobre Tables y seleccionamos
Refresh.
5. En la ventana de nueva consulta en blanco, escriba y ejecute el siguiente cdigo de Transact-
SQL:

6. Cuando el comando haya finalizado correctamente, haga clic con el botn derecho del mouse en
la carpeta Triggers del Explorador de objetos y, a continuacin, haga clic en Refresh para
comprobar que se ha creado el disparador dJobCandidate.
7. En la tabla HumanResources.JobCandidate, elimine el registro que tenga el menor
JobCandidateID.


Sesin12 TRANSACTIONSQLSERVER

5 Ing.LeticiaMarisolLauraOchoa

8. Revise el contenido de la tabla HumanResources.JobCandidateHistory.




Notas adicionales:
DECLARE @l ocal _var i abl e Permite declarar variables variables dentro de un proceso por lotes
o procedimiento con la instruccin DECLARE, y se les asignan valores con una instruccin SET o
SELECT. @local_variable es el nombre de la variable. Los nombres de variables deben comenzar con
un signo de arroba (@).

@@TRANCOUNT Funcin que devuelve el nmero de las transacciones activas de la conexin actual.
SET NOCOUNT ON Evita que se devuelva el mensaje que muestra el recuento del nmero de filas
afectadas por una instruccin o un procedimiento almacenado de Transact-SQL como parte del
conjunto de resultados.

V. EJERCICIOS

Utilizando la BD PRESUPUESTO en SQL Server, realice los siguientes ejercicios:

1. Cree un trigger de auditora para la tabla PRESUP_DET, que almacene en una tabla
denominada AUDIT_PRESUP_DET las operaciones INSERT, UPDATE y DELETE,
nombre del usuario y fecha en que se producen.
2. Cree un trigger para la tabla EMPRESAS que permita guardar en una tabla
EmpresasHistorial, todas las eliminaciones hechas en la tabla. Debe crear la tabla
EmpresasHistorial.
3. Cree un trigger para la tabla PRESUP_CAB de tal forma que al modificar un registro
emita un mensaje de error si el monto ejecutado es mayor al monto presupuestado.
4. Cree un trigger para la tabla PRESUP_CAB de tal forma que al insertar o modificar un
registro emita un mensaje de error si el ao de ejercicio es mayor al ao de la fecha
actual.

Potrebbero piacerti anche