Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Objetivos:
Recursos:
Introduccin
Muchas veces es importante el poder proteger nuestras tablas y registros de acciones
accidentales o procesos que como diseadores no queremos que se realicen, una forma
de lograr este objetivo es el uso de Triggers.
Es importante mencionar que se deben tener los permisos necesarios para hacer algunos
procesos, y algunos de los procesos que signifiquen transacciones muy peligrosas deben
de ser realizadas con mucho cuidado.
Desencadenadores / Triggers
Un desencadenador es una clase especial de procedimiento almacenado que se ejecuta
automticamente cuando se produce un evento en el servidor de bases de datos. Los
desencadenadores DML se ejecutan cuando un usuario intenta modificar datos mediante
un evento de lenguaje de manipulacin 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 vlido, con independencia de que las
filas de la tabla se vean o no afectadas.
Los desencadenadores DDL se ejecutan como respuesta a diversos eventos del lenguaje
de definicin 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.
RAISERROR
Genera un mensaje de error y se inicia el proceso de errores para la sesin. RAISERROR
puede o bien hacer referencia a un mensaje definido por el usuario almacenado en el
sys.messages vista de catlogo o construir un mensaje dinmicamente.
ROLLBACK TRANSACTION
Revierte una transaccin explcita o implcita al principio de la operacin, o en un punto de
almacenamiento dentro de la transaccin. Puede usar ROLLBACK TRANSACTION para
borrar todas las modificaciones de datos realizadas desde el inicio de la operacin o de un
punto de retorno. Tambin libera los recursos retenidos por la transaccin.
FORMA GRAFICA
En primer lugar seleccionamos la base de datos en que quiero trabajar y la expando, para
nuestro ejemplo tomaremos la tabla roles, y seleccionaremos Triggers, segn muestra la
figura.
Presionaremos clic derecho y presionamos New Triggers, lo cual nos crear una nueva
consulta que nos mostrara la siguiente informacin:
-- ================================================
-- Template generated from Template Explorer using:
-- Create Trigger (New Menu).SQL
--- Use the Specify Values for Template Parameters
-- command (Ctrl-Shift-M) to fill in the parameter
-- values below.
--- See additional Create Trigger templates for more
-- examples of different Trigger statements.
--- This block of comments will not be included in
-- the definition of the function.
-- ================================================
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:
<Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
CREATE TRIGGER <Schema_Name, sysname, Schema_Name>.<Trigger_Name, sysname, Trigger_Name>
ON <Schema_Name, sysname, Schema_Name>.<Table_Name, sysname, Table_Name>
AFTER <Data_Modification_Statements, , INSERT,DELETE,UPDATE>
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for trigger here
END
GO
Estas dos consultas nos mostraran el mensaje 'Esta tabla, no permite actualizar,
agregar' No probaremos DELETE porque la relacin no me lo permitira.
modificar y
Ejercicios:
GO
CREATE TABLE roles (
id_rol int IDENTITY(1,1),
rol varchar(20) not null,
CONSTRAINT PK_roles PRIMARY KEY (id_rol) )
CREATE TABLE pais (
id_pais int IDENTITY(1,1),
pais varchar(25),
CONSTRAINT PK_pais PRIMARY KEY (id_pais) )
CREATE TABLE personas (
id_persona int IDENTITY(1,1),
apellido varchar(40) not null,
nombre varchar(40) not null,
sueldo smallmoney,
celular varchar(8),
sexo varchar(1),
nacimiento date,
id_rol int not null,
id_pais int not null,
CONSTRAINT PK_persona PRIMARY KEY (id_persona),
CONSTRAINT FK_perrol FOREIGN KEY (id_rol)
REFERENCES roles(id_rol),
CONSTRAINT FK2_perpais FOREIGN KEY (id_pais)
REFERENCES pais(id_pais) )
CREATE TABLE tipo_descuento (
id_tipodes int IDENTITY(1,1),
descuento varchar(40) not null,
CONSTRAINT PK_descu PRIMARY KEY (id_tipodes) )
CREATE TABLE descuentos (
id_descu int IDENTITY(1,1),
monto smallmoney,
fecha date,
id_persona int not null,
id_tipodes int not null,
CONSTRAINT PK_descuentos PRIMARY KEY (id_descu),
CONSTRAINT FK_desper FOREIGN KEY (id_persona)
REFERENCES personas(id_persona),
CONSTRAINT FK2_destipo FOREIGN KEY (id_tipodes)
REFERENCES tipo_descuento(id_tipodes) )
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INTO
INTO
INTO
INTO
INTO
INTO
INTO
roles
roles
roles
roles
roles
roles
roles
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
pais
pais
pais
pais
pais
pais
pais
pais
pais
pais
INSERT
INSERT
INSERT
INSERT
INSERT
INTO
INTO
INTO
INTO
INTO
personas
personas
personas
personas
personas
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
('ScrumMaster')
('ProductOwner')
('Team')
('Steakholders')
('Tester')
('Developer')
('Designer')
('El Salvador')
('Guatemala')
('Costa Rica')
('Japon')
('Estados Unidos')
('Argentina')
('Mexico')
('Uruguay')
('Canada')
('Chile')
VALUES
VALUES
VALUES
VALUES
VALUES
('Hernandez Mancia','Marielos',958,'67567555','F','1986/7/4',3,4)
('Perez Juarez','Joaquin',850,'34567564','M','1969/9/2',3,1)
('Solis Castro','Eduardo',600,'12327523','M','1972/3/11',3,1)
('Ramos Nieto','Jorge',550,'34567174','M','1972/10/4',4,1)
('Hernandez Carias','Johanna',1800,'34234809','F','1952/3/4',1,1)
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
personas
personas
personas
personas
personas
personas
personas
personas
personas
personas
personas
personas
personas
personas
personas
personas
personas
personas
personas
personas
personas
personas
personas
personas
personas
personas
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
INSERT
INSERT
INSERT
INSERT
INSERT
INTO
INTO
INTO
INTO
INTO
tipo_descuento
tipo_descuento
tipo_descuento
tipo_descuento
tipo_descuento
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
descuentos
descuentos
descuentos
descuentos
descuentos
descuentos
descuentos
descuentos
descuentos
descuentos
descuentos
descuentos
descuentos
descuentos
descuentos
descuentos
descuentos
descuentos
descuentos
descuentos
descuentos
descuentos
descuentos
descuentos
descuentos
descuentos
descuentos
descuentos
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
('Personal')
('Llegada Tardia')
('Amonestacion')
('Bancaria')
('Cooperativa')
(34.5,'2014/1/14',1,1)
(11.2,'2014/1/17',10,1)
(5,'2014/1/19',21,2)
(6.78,'2014/1/21',11,1)
(50,'2014/1/30',9,5)
(16.78,'2014/1/15',3,3)
(22,'2014/1/4',2,4)
(15,'2014/1/23',10,1)
(18.8,'2014/1/29',2,3)
(21,'2014/1/30',9,2)
(1.5,'2014/2/3',10,3)
(7.5,'2014/2/9',2,4)
(23.1,'2014/2/12',9,4)
(3.5,'2014/2/4',13,3)
(9.2,'2014/2/7',19,4)
(15,'2014/2/15',20,4)
(16.8,'2014/2/20',13,2)
(21,'2014/2/22',29,5)
(34.5,'2014/3/1',9,3)
(11.2,'2014/3/5',25,2)
(5,'2014/3/6',7,5)
(16.3,'2014/3/9',16,1)
(50,'2014/3/15',17,5)
(6.78,'2014/3/18',3,1)
(50,'2014/3/21',22,1)
(5,'2014/3/23',10,3)
(8.8,'2014/3/29',2,4)
(23,'2014/3/30',9,5)