La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Delete en tablas: titulacion. Puedo eliminar cualquier fila de una tabla? Restriccion de integridad: Restrict/Cascade.

Presentaciones similares


Presentación del tema: "Delete en tablas: titulacion. Puedo eliminar cualquier fila de una tabla? Restriccion de integridad: Restrict/Cascade."— Transcripción de la presentación:

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.

3

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.


Descargar ppt "Delete en tablas: titulacion. Puedo eliminar cualquier fila de una tabla? Restriccion de integridad: Restrict/Cascade."

Presentaciones similares


Anuncios Google