Sei sulla pagina 1di 5

Tema 04: TRIGGERS

Manejo de Errores
Raiserror .- Esta funcin permite establecer mensajes de errores en el SQL-Server Sintaxis:
Raiserror(Msg, Nivel ,Estado)
Msg .- Es el mensaje que se quiere mostrar
Nivel.- Se trata del nivel de gravedad definido por el usuario que se asocia con este mensaje.
Todos los usuarios pueden utilizar los niveles de gravedad de 0 a 18. Slo los miembros de la
funcin fija de servidor sysadmin pueden utilizar los niveles de gravedad de 19 a 25.
Estado.- Es un entero arbitrario entre 1 y 127 que representa informacin acerca del estado
de llamada del error. Un valor negativo de Estado pasa a tener un valor predeterminado de 1.
Ejemplo:
RaisError ('Este es es un mensaje con nivel 0 y estado 1', 0,1)
Sysmessages .- Es una tabla que se encuentra en la base de datos Master que contienes todos
los mensajes disponibles
Ejemplo: select * from sysmessages (donde el campo error es el numero de error, Severity el
nivel, etc.)
SP _ add Message.- Agrega un nuevo mensaje de error a la tabla sysmessages
Ejemplo:
Sp _ addmessage 50001, 16, Este es el mensaje 50001
Una vez hecho esto el mensaje se adiciona a la tabla y para llamarlo seria as:
RAISERROR (50001, 16,1)
sp_dropmessage .- Elimina un mensaje
Ejemplo: sp_dropmessage 50001 donde 50001 es el nmero de mensaje que se
quiere eliminar (Los mensajes se pueden aadir a partir del 50001)
@@Rowcount.- Saca la cantidad de Filas afectadas en la ltima instruccin SQL.
Triggers
Los triggers son procedimientos internos que se ejecutan cada vez
que se haga un Insert, Update o Delete, Internamente se crea una
tabla temporal Inserted cuando se agrega, Deleted cuando se
elimina y ambas cuando se actualiza.
En el caso de una actualizacin se crean las dos tablas Inserted y
Deleted en la tabla Inserted va los datos a insertar en la
actualizacin y en Deleted los datos que van a ser sustituidos.
Sintaxis:
Create Trigger Nombre Trigger
On Table For Insert, update, Delete
As
Donde Tabla es la tabla donde se va a crear el Trigger y en For va cuando se va a
ejecutar el Trigger (Si fuera en los 3 casos se pone los 3 Insert,Update y Deleted
y solo se separan por una coma)
Ejemplos de Triggers:
Crear la Siguiente Base de Datos.
USE master
go
CREATE DATABASE ESTUDIOS
GO
USE ESTUDIOS
GO
-- Creacin de las Tablas.
Create Table Carreras
(codcar int not null primary key,
nomcar varchar(30)
)
GO
Create Table Alumnos
(codalu char(7) not null primary key,
nomalu varchar(30),
codcar int
)
GO
Create Table Notas
(codalu char(7),
codcur char(5),
pp int,
ep int,
ef int
)
GO
Create Table Cursos
(codcur char(5) not null primary key,
nomcur varchar(25)
)
go
Create Table LogCursos
(codcur char(5),
nomcur varchar(25),
Fecha Datetime,
Usuario Varchar(10))


Go
Con la base de Datos Estudio crear los siguientes Triggers.
--Creacion de Triggers
--1.- Mostrar un Mensaje Cuando se haga un Insert,Update o Delete
Create Trigger TR1
on Cursos For Insert,Update,Delete
as
RaisError('Se ha afectado %d Fila',0,1,@@Rowcount)
--Aqui el Nivel es 0 y el Estado 1 Al haber %d se le pasa el valor de una Variable en este Caso
@@Rowcount
GO
--2.- No permitir que se agregue un Curso con el Mismo Nombre
Create Trigger TR2
on Cursos For Insert
as
Declare @nom varchar(25)
Select @nom = nomcur from inserted
If (Select count(*) from cursos where nomcur=@nom)>1
Bejn
RaisError('Nombre del Curso ya existe',0,1)
Rollback Transaction
End
Go
--3.- Crear un Trigger que no permita Modificar el Nombre de Un alumno
Create Trigger TR3
on Alumnos For Update
as
If Update(Nomalu)
Begin
Print 'No se puede Modificar el Nombre del Alumno '
Rollback Transaction
End
Go
--4.- Crear un trigger que no permita Modificar el campo pp con una nota menor a la que ya tiene
Create Trigger TR4
on Notas For Update
as
Declare @n1 int,@n2 int
Select @n1 = pp from deleted
Select @n2 = pp from inserted
if Update(pp)
Begin
if @n2 < @n1
Begin
--Print 'No se puede Modificar la nota ' + convert(varchar(2),@n1) + ' por la nota ' +
convert(varchar(2),@n2)
--Print 'No se puede Modificar la nota ' + cast(@n1 as varchar(2)) + ' por la nota ' + cast(@n2 as
varchar(2))
RaisError('No se puede Modificar la nota %d por la nota %d por ser menor',0,1,@n1,@n2)
Rollback Transaction
End
End
Go
--5.- Crear un trigger que no permita eliminar Una Carrera que este en la tabla alumnos
Create Trigger TR5
on Carreras For Delete
as
Declare @xcod int
Select @xcod = codcar from deleted
if Exists(select * from Alumnos where codcar=@xcod)
Begin
Print 'No se puede Eliminar la carrera'
Rollback Transaction
End
Go
--6.- Crear Un Trigger que Al eliminar Un curso elimine en Cascada Las Notas de esos cursos.
Create Trigger TR6
on Cursos For Delete
as
Declare @xCodcur VARCHAR(5)
Select @xCodCur = Codcur from deleted
Delete from Notas where Codcur = @XcodCur
Go
--7.- Crear un Trigger a la tabla Cursos que cuando se modifique un registro se guarden los datos a
Modificar en una tabla
--Para este ejercicio debemos crear una tabla Idntica a la Tabla Cursos la cual llamaremos
LogCursos
Create Trigger TR7
on Cursos For Update
as
Declare @xCod VARCHAR(5)
Declare @xNom varchar(25)
Select @xCod = codcur from deleted
Select @xNom = NomCur from deleted
INSERT INTO LogCursos values(@xcod,@xnom,getdate(),'SUPERVISOR')

Potrebbero piacerti anche