Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > MS SQL Server
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

 
 
Herramientas Buscar en Tema Desplegado
  #6  
Antiguo 11-03-2010
sinalocarlos sinalocarlos is offline
Miembro
 
Registrado: sep 2006
Posts: 152
Poder: 19
sinalocarlos Va por buen camino
A mi entender lo correcto seria manejar la propiedad de "cascade" en los foreign key para el delete entre las tablas detalles, asi cuando borrases un detalle en la tabla de Fac_DetalleB se eliminaria de la tabla de Fac_DetalleBS sin tener que tirar codigo de tu parte.

sin embargo el mundo no es tan bello como quisieramos y existen ocaciones en donde el borrado de los detalles de las tablas secundarias es en base a validaciones y es ahi donde nos metemos en problemas al usar un delete on cascade y casi casi nos vemos forsados a ejecutar procedimientos.

en tu caso el borrado de las tablas quedaria:

Código SQL [-]
delete from Fac_DetalleBS
from Fac_DetalleBS inner join Fac_DetalleB on 
Fac_DetalleBS.iddetalle =  Fac_DetalleB.iddetalle
inner join fac_factura on Fac_DetalleB.idfactura =  fac_factura.idfactura
where fac_factura.NumCons = @FactNo

y con eso te ahorras la consulta para sacar el id de la factura, para eliminar los detalles de la tabla Fac_DetalleB se usaria la misma logica:


Código SQL [-]
delete from Fac_DetalleB
from Fac_DetalleB inner join fac_factura on 
Fac_DetalleB.idfactura =  fac_factura.idfactura
where fac_factura.NumCons = @FactNo
y listo.

incluso existe una tercera opcion:

usando un trigger instead of delete en la tabla Fac_DetalleB

Código SQL [-]
create trigger trg_fac_detalleb
on fac_detalleb
instead of delete
as
begin
    delete from fac_detallebs
    from fac_detallebs inner join deleted on 
    fac_detalleb.iddetalle = deleted.iddetalle 
    
    delete from fac_detalleb
    from fac_detalleb inner join deleted on 
    fac_detalleb.iddetalle = deleted.iddetalle 
    

end

y asi la eliminacion de los detalles se haria automatico con el borrado.

tu decides.

por cierto, si detectas algun error en sintaxis el problema es que no tengo SQL la mano y lo teclee todo en notepad
Responder Con Cita
 



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Mirar por favor este query y comentar... El_Raso Firebird e Interbase 33 18-11-2008 12:53:44
ayuda con este codigo kurono Varios 4 13-06-2008 01:03:29
una ayuda con este error please dariana20 SQL 3 14-06-2006 23:14:06
como quedaria el SQL para este Query?? JCarlos Conexión con bases de datos 2 15-11-2004 12:59:28
Ayuda con este error???? danytorres Varios 1 27-10-2004 11:38:09


La franja horaria es GMT +2. Ahora son las 06:55:48.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi