Descargar la presentación
La descarga está en progreso. Por favor, espere
Publicada porValerio Severino Modificado hace 10 años
1
Delete en tablas: titulacion. Puedo eliminar cualquier fila de una tabla? Restriccion de integridad: Restrict/Cascade
2
Ojo: Titulacion se relaciona con Asignatura, y a la vez Asignatura se relaciona con Alumnoasignatura… Que pasa si esta en Cascada?....: Tanto Titulacion como Asignatura.
4
create PROCEDURE deletetitulacion1(@idtit numeric(6)) AS if exists (select * from titulacion where idtitulacion=@idtit) begin DELETE titulacion WHERE (idtitulacion=@idtit) return 0 end else return 1
5
declare @status int exec @status=deletetitulacion1 130111 if @status=0 print 'Se elimino registro en titulacion' else if @status=1 print 'no existe la titulacion a eliminar'
6
Si solo esta en cascada Titulacion y no Asignatura (por diseño y reglas de negocio)… Tenemos 2 opciones:
7
1.- Forzamos la eliminacion en alumnoasignatura.
8
create PROCEDURE deletetitulacion(@idtit numeric(6)) AS declare @num numeric(6) if exists (select * from titulacion where idtitulacion=@idtit) begin if exists (select * from alumnoasignatura, asignatura, titulacion where alumnoasignatura.idasignatura=asignatura.idasignatura and asignatura.idtitulacion=@idtit) begin delete alumnoasignatura where idasignatura in (select idasignatura from asignatura where idtitulacion=@idtit) DELETE titulacion WHERE (idtitulacion=@idtit) return 0 end else begin DELETE titulacion WHERE (idtitulacion=@idtit) return 0 end else return 1
9
declare @status int exec @status=deletetitulacion 130111 if @status=0 print 'Se elimino registro en titulacion' else if @status=1 print 'no existe la titulacion a eliminar'
10
Otra forma de hacer lo mismo: llamamos a otro procedimiento almacenado dentro del que ejecutamos.
11
create PROCEDURE deletetitulacion3(@idtit numeric(6)) AS declare @num numeric(6) if exists (select * from titulacion where idtitulacion=@idtit) begin if exists (select * from alumnoasignatura, asignatura, titulacion where alumnoasignatura.idasignatura=asignatura.idasignatura and asignatura.idtitulacion=@idtit) begin exec borraralasig @idtit DELETE titulacion WHERE (idtitulacion=@idtit) return 0 end else begin DELETE titulacion WHERE (idtitulacion=@idtit) return 0 end else return 1
12
create procedure borraralasig (@idtit numeric(6)) as delete alumnoasignatura where idasignatura in (select idasignatura from asignatura where idtitulacion=@idtit)
13
declare @status int exec @status=deletetitulacion3 130110 if @status=0 print 'Se elimino registro en titulacion' else if @status=1 print 'no existe la titulacion a eliminar'
14
2.- Simplemente no se puede eliminar el registro en alumnoasignatura.
15
create PROCEDURE deletetitulacion2(@idtit numeric(6)) AS declare @num numeric(6) if exists (select * from titulacion where idtitulacion=@idtit) begin if exists (select * from alumnoasignatura, asignatura, titulacion where alumnoasignatura.idasignatura=asignatura.idasignatura and asignatura.idtitulacion=@idtit) return 2 else begin DELETE titulacion WHERE (idtitulacion=@idtit) return 0 end else return 1
16
declare @status int exec @status=deletetitulacion2 130110 if @status=0 print 'Se elimino registro en titulacion' else if @status=1 print 'no existe la titulacion a eliminar' if @status=2 print 'no se puede eliminar la titulacion ya que tiene ramos inscritos'
17
Podemos guardar los datos eliminados??
18
Se elimina una titulacion y se guarda id y nombre, ademas del usuario que elimino y la fecha… Se asume delete on cascade…
19
Creamos la tabla para guardar los datos: create table auditoriatit (cod SMALLINT IDENTITY(1,1) NOT NULL primary key, idtit numeric(6), nombre varchar (20), usuario varchar (20), fecha datetime)
20
create PROCEDURE deletetitulacionaudit(@idtit numeric(6)) AS declare @tit numeric(6), @nom varchar(20) if exists (select * from titulacion where idtitulacion=@idtit) begin select @tit=idtitulacion from titulacion where idtitulacion=@idtit select @nom=nombre from titulacion where idtitulacion=@idtit insert into auditoriatit (idtit, nombre, usuario, fecha) values (@tit, @nom, user, getdate()) DELETE titulacion WHERE (idtitulacion=@idtit) return 0 end else return 1
21
declare @status int exec @status=deletetitulacionaudit 160000 if @status=0 print 'Se elimino registro en titulacion y se hizo backup' else if @status=1 print 'no existe la titulacion a eliminar'
22
select * from auditoriatit
23
Podria hacerse la insercion a auditoria llamando a otro procedimiento almacenado dentro del actual…
24
Insert, Update, Delete…se pueden hacer con el Asistente de SQL SERVER.
Presentaciones similares
© 2024 SlidePlayer.es Inc.
All rights reserved.