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 numeric(6)) AS if exists (select * from titulacion where begin DELETE titulacion WHERE return 0 end else return 1

5 int print 'Se elimino registro en titulacion' else 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 numeric(6)) AS numeric(6) if exists (select * from titulacion where begin if exists (select * from alumnoasignatura, asignatura, titulacion where alumnoasignatura.idasignatura=asignatura.idasignatura and begin delete alumnoasignatura where idasignatura in (select idasignatura from asignatura where DELETE titulacion WHERE return 0 end else begin DELETE titulacion WHERE return 0 end else return 1

9 int print 'Se elimino registro en titulacion' else 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 numeric(6)) AS numeric(6) if exists (select * from titulacion where begin if exists (select * from alumnoasignatura, asignatura, titulacion where alumnoasignatura.idasignatura=asignatura.idasignatura and begin exec DELETE titulacion WHERE return 0 end else begin DELETE titulacion WHERE return 0 end else return 1

12 create procedure borraralasig numeric(6)) as delete alumnoasignatura where idasignatura in (select idasignatura from asignatura where

13 int print 'Se elimino registro en titulacion' else print 'no existe la titulacion a eliminar'

14 2.- Simplemente no se puede eliminar el registro en alumnoasignatura.

15 create PROCEDURE numeric(6)) AS numeric(6) if exists (select * from titulacion where begin if exists (select * from alumnoasignatura, asignatura, titulacion where alumnoasignatura.idasignatura=asignatura.idasignatura and return 2 else begin DELETE titulacion WHERE return 0 end else return 1

16 int print 'Se elimino registro en titulacion' else print 'no existe la titulacion a eliminar' 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 numeric(6)) AS varchar(20) if exists (select * from titulacion where begin from titulacion where from titulacion where insert into auditoriatit (idtit, nombre, usuario, fecha) user, getdate()) DELETE titulacion WHERE return 0 end else return 1

21 int print 'Se elimino registro en titulacion y se hizo backup' else 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