none
Borrado en Cascada RRS feed

  • Pregunta

  • Hola, como puedo hacer un borrado en cascada? (o al menos ese es el concepto que creo debo hacer), tengo los siguientes datos:

     

    Tabla CargaDatos

    IDCARGA FECHA

    1             07/02/2010

    2             08/02/2010


    Tabla Historico

    IDHIST  IDCARGA RUT MES AÑO DEPTO

    1          1             1-1   1    2010   1

    2          1             5-7   1    2010   2

    3          2             5-7   1    2010   3

    4          2             8-1   1    2010   2

     

    y :

    Tabla DetalleAsignaciones

    IDHIST IDASIG MONTO

    1              1      15000

    1              2      25000

    1              3      35000

    2              1      27000

    2              2      45000

    2              3      80000

    3              1      12000

    3              2      87000

    3              3      2000

    4              1      45000

    4              2      19000

    4              3      78000

    La idea es hacer un procedimiento almacenado el cual me realice un rollback a la tabla "CARGADATOS" y todos los campos involucrados de las otras tablas:

    esto es: Que si elijo borrar el proceso cargado el dia 08/02/2010 (Tabla CargaDatos), las tablas deberian quedar asi:

     

    Tabla CargaDatos

    IDCARGA FECHA

    1             07/02/2010

     

     

    Tabla Historico

    IDHIST  IDCARGA RUT MES AÑO DEPTO

    1          1             1-1   1    2010   1

    2          1             5-7   1    2010   2

     

    y :

    Tabla DetalleAsignaciones

    IDHIST IDASIG MONTO

    1              1      15000

    1              2      25000

    1              3      35000

    2              1      27000

    2              2      45000

    2              3      80000

     

    Alguna idea de como lo podria hacer?

    Muchas Gracias

    martes, 17 de agosto de 2010 8:29

Respuestas

  • Hola.

    Por una parte, un rollback no es lo mismo que un borrado. Un rollback es la cancelación de todas las transacciones en curso en ese momento (para la conexión que se esté usando).

    Sobre los borrados en cascada, aunque lo podrías implementar a través de integridad referencial, te recomiendo que lo encapsules en un procedimiento almacenado en el que elimines en orden de cada tabla. Así, en tu procedimiento almacenado harías una cosa más o menos así:

    begin tran
    
    delete D from detalleAsignaciones D inner join Historico H on D.idhist = H.idhist inner join CargaDatos C on H.IdCarga = C.IdCarga
    where C.Fecha = '20100802'
    
    delete H from Historico H on inner join CargaDatos C on H.IdCarga = C.IdCarga
    where C.Fecha = '20100802'
    
    delete C from CargaDatos C where C.Fecha = '20100802'
    
    commit
    

    Faltaría un control de errores más elaborado, pero la idea es esa. Los borrados en cascada pueden ser muy peligrosos, porque la integridad referencial no te protege de borrados accidentales.

    Si no lo logras, nos dices.


    Alberto López Grande (Visita mi blog en http://qwalgrande.blogspot.es/)
    martes, 17 de agosto de 2010 9:04
    Moderador

Todas las respuestas

  • Hola.

    Por una parte, un rollback no es lo mismo que un borrado. Un rollback es la cancelación de todas las transacciones en curso en ese momento (para la conexión que se esté usando).

    Sobre los borrados en cascada, aunque lo podrías implementar a través de integridad referencial, te recomiendo que lo encapsules en un procedimiento almacenado en el que elimines en orden de cada tabla. Así, en tu procedimiento almacenado harías una cosa más o menos así:

    begin tran
    
    delete D from detalleAsignaciones D inner join Historico H on D.idhist = H.idhist inner join CargaDatos C on H.IdCarga = C.IdCarga
    where C.Fecha = '20100802'
    
    delete H from Historico H on inner join CargaDatos C on H.IdCarga = C.IdCarga
    where C.Fecha = '20100802'
    
    delete C from CargaDatos C where C.Fecha = '20100802'
    
    commit
    

    Faltaría un control de errores más elaborado, pero la idea es esa. Los borrados en cascada pueden ser muy peligrosos, porque la integridad referencial no te protege de borrados accidentales.

    Si no lo logras, nos dices.


    Alberto López Grande (Visita mi blog en http://qwalgrande.blogspot.es/)
    martes, 17 de agosto de 2010 9:04
    Moderador
  • Excelente, funciona a la perfeccion, muchas gracias!!
    miércoles, 18 de agosto de 2010 7:59