Eliminacion en cascada

16/02/2004 - 21:44 por Bran | Informe spam
Hola a todos...

Alguno sabe como hacer eliminacion o actualizacion en casacada en una tabla
con una referencia ciclica...

Alguien sabe que puedo hacer...

Gracias.

Preguntas similare

Leer las respuestas

#1 Maximiliano D. A.
16/02/2004 - 21:50 | Informe spam
Lo podrias hacer con el Referencial mismo, pero porque no me envias la
estructura de tablas y lo vemos mejor


Salu2
Maximiliano Damian Accotto
Buenos Aires Argentina
Desarrollador Microsoft 3 Estrellas .NET
[Maxi_accotto[arroba]speedy[punto]com[punto]ar
MSN:


"Bran" escribió en el mensaje
news:
Hola a todos...

Alguno sabe como hacer eliminacion o actualizacion en casacada en una


tabla
con una referencia ciclica...

Alguien sabe que puedo hacer...

Gracias.







Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.581 / Virus Database: 368 - Release Date: 09/02/2004
Respuesta Responder a este mensaje
#2 Bran
16/02/2004 - 22:34 | Informe spam
SQL no deja desde ahi.. ya que es una referencia ciclica...

esta es la estrctura...


Id Nombre Padre Nivel
_______ ________________ __________ ____
1 Padre 1 0 1
2 Hijo 1 1 2
3 Padre 2 0 1
4 Hijo 2 2 3
5 Hijo 3 3 2
...


lo que necesito es que en el caso de borrar el "Padre 1" se eliminen los
hijos de ese registro y sus sucesores...

como seria asi...???


"Maximiliano D. A." <maxi_accotto[arroba]speedy[.]com[.]ar> escribió en el
mensaje news:
Lo podrias hacer con el Referencial mismo, pero porque no me envias la
estructura de tablas y lo vemos mejor


Salu2
Maximiliano Damian Accotto
Buenos Aires Argentina
Desarrollador Microsoft 3 Estrellas .NET
[Maxi_accotto[arroba]speedy[punto]com[punto]ar
MSN:


"Bran" escribió en el mensaje
news:
> Hola a todos...
>
> Alguno sabe como hacer eliminacion o actualizacion en casacada en una
tabla
> con una referencia ciclica...
>
> Alguien sabe que puedo hacer...
>
> Gracias.
>
>



Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.581 / Virus Database: 368 - Release Date: 09/02/2004


Respuesta Responder a este mensaje
#3 Maximiliano Damian Accotto
16/02/2004 - 23:09 | Informe spam
aja, bueno deberias armar un trigger primero que haga algo asi como

Create trigger actualizo on tabla for Delete as

Delete from tabla where padre in (select id From deleted where nivel=1)



Salu2 enormes

Maximiliano Damian Accotto

Fundicion San Cayetano S.A.
Gerente de IT
Buenos Aires - Argentina
-
Desarrollador 3 estrellas
http://www.microsoft.com/spanish/ms...efault.asp
-
(maxi_accotto[arroba]speedy.com.ar)
MSN:
"Bran" escribió en el mensaje
news:
SQL no deja desde ahi.. ya que es una referencia ciclica...

esta es la estrctura...


Id Nombre Padre Nivel
_______ ________________ __________ ____
1 Padre 1 0 1
2 Hijo 1 1 2
3 Padre 2 0 1
4 Hijo 2 2 3
5 Hijo 3 3 2
...


lo que necesito es que en el caso de borrar el "Padre 1" se eliminen los
hijos de ese registro y sus sucesores...

como seria asi...???


"Maximiliano D. A." <maxi_accotto[arroba]speedy[.]com[.]ar> escribió en el
mensaje news:
> Lo podrias hacer con el Referencial mismo, pero porque no me envias la
> estructura de tablas y lo vemos mejor
>
>
> Salu2
> Maximiliano Damian Accotto
> Buenos Aires Argentina
> Desarrollador Microsoft 3 Estrellas .NET
> [Maxi_accotto[arroba]speedy[punto]com[punto]ar
> MSN:
>
>
> "Bran" escribió en el mensaje
> news:
> > Hola a todos...
> >
> > Alguno sabe como hacer eliminacion o actualizacion en casacada en una
> tabla
> > con una referencia ciclica...
> >
> > Alguien sabe que puedo hacer...
> >
> > Gracias.
> >
> >
>
>
>
> Outgoing mail is certified Virus Free.
> Checked by AVG anti-virus system (http://www.grisoft.com).
> Version: 6.0.581 / Virus Database: 368 - Release Date: 09/02/2004
>
>


Respuesta Responder a este mensaje
#4 ulises
16/02/2004 - 23:54 | Informe spam
Como mencionas el SQL no lo permite, pero podrías hacer un
stored procedure que se encargue de la eliminación, la
idea es pasar como parámetro el "id" que deseas eliminar,
luego en una tabla temporal va almacenando los campos "id"
del registro a eliminar y luego de los niveles siguientes,
luego solo utilizas una sentencia delete para borrar todos
los "id" contenidos en esa tabla temporal. Algo como (SIN
PROBAR) :

CREATE PROC deEliminaRegistro
( @idaborrar int )
AS
/* Obtiene el nivel del registro a borrar y el nivel
máximo que debe buscar */
declare @nivelini integer
declare @nivelmax integer
select @nivelini = nivel from tabla where id = @idaborrar
select @nivelmax = max(nivel) from tabla
/* inserta el registro a borrar en la tabla temporal */
create table #a ( id int, nivel int )
insert into #a select id, nivel from tabla where id =
@idaborrar
/* itera en todos los niveles para cargar los id de los
registros que tengan como padre a id del nivel anterior */
set @nivel = @nivelini + 1
While @nivel <= @nivelmax
begin
insert into #a
select id, nivel from tabla
where nivel = @nivel
and padre in ( select id from #a where nivel = @nivel -
1 )
set @nivel = @nivel + 1
end
/* elimina los registros */
delete from tabla where id in ( select id from #a )
drop table #a

como te digo solo lo he escrito no lo probado, revisalo y
ve si se adapta a tus necesidades.

Saludos,
Ulises

SQL no deja desde ahi.. ya que es una referencia


ciclica...

esta es la estrctura...


Id Nombre Padre


Nivel
_______ ________________ __________ ____
1 Padre 1


0 1
2 Hijo 1


1 2
3 Padre 2


0 1
4 Hijo 2


2 3
5 Hijo 3


3 2



lo que necesito es que en el caso de borrar el "Padre 1"


se eliminen los
hijos de ese registro y sus sucesores...

como seria asi...???


"Maximiliano D. A." <maxi_accotto[arroba]speedy[.]com[.]


ar> escribió en el
mensaje news:
Lo podrias hacer con el Referencial mismo, pero porque




no me envias la
estructura de tablas y lo vemos mejor


Salu2

Maximiliano Damian Accotto
Buenos Aires Argentina
Desarrollador Microsoft 3 Estrellas .NET
[Maxi_accotto[arroba]speedy[punto]com[punto]ar
MSN:



"Bran" escribió en el mensaje
news:
> Hola a todos...
>
> Alguno sabe como hacer eliminacion o actualizacion en




casacada en una
tabla
> con una referencia ciclica...
>
> Alguien sabe que puedo hacer...
>
> Gracias.
>
>



Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system




(http://www.grisoft.com).
Version: 6.0.581 / Virus Database: 368 - Release Date:




09/02/2004






.

Respuesta Responder a este mensaje
#5 Gustavo Larriera [MVP SQL]
17/02/2004 - 01:02 | Informe spam
Las acciones en cascada deben formar un árbol SIN referencias circulares.
Una tabla no puede aparecer más de una vez en la lista de acciones de la
cascada.

En mi opinión, rompería la referencia circular y la controlaría mediante
triggers.

Gustavo Larriera, MVP-SQL, MCSE
Uruguay LatAm

Este mensaje se proporciona "como está" sin garantías de ninguna clase, y no
otorga ningún derecho.


"Bran" wrote in message
news:
Hola a todos...

Alguno sabe como hacer eliminacion o actualizacion en casacada en una


tabla
con una referencia ciclica...

Alguien sabe que puedo hacer...

Gracias.


Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida