Hola amigos. Tengo una estructura de arbol
a1b1
|-b2
| |--c1
| |--c2
|-b3
Almacenada en una tabla Id_RubroxSubrubro, Id_Rubro, Id_subrubro, Nivel
Quiero realizar lo que seria una baja en cascada, por ejemplo borrado el
nodo b2 y por ende c1 y c2.
En realidad lo que borro son las relaciones, no los nodos.
El problema surge que si hago un sp que para cada nodo hijo, busque sus
propios hijo y los borre, y si hago esto con una funcion que se llame a si
misma, tengo un problema al guardar los datos de la primera tanda de hijos
en un cursor, porque la siguiente llamada al sp con cada uno de los hijos me
trata de abrir un cursor que ya existe. El tema es, los cursores no se
limitan al alcance del sp?
Como siempre, gracias de antemano
Aqui va el codigo
create Procedure Sp_RubroBorraSubrubro
@Id_RubroDel int,
@Id_UsuarioAuditoria int
as
begin tran
Declare @Id_RubroxSubrubro int,
@Id_Rubro int,
@Id_Subrubro int,
@Id_Accion int
Declare curHijos CURSOR
for
Select Id_RubroxSubrubro, Id_Rubro, Id_Subrubro from Rubro_X_Subrubro
where Id_Rubro = @Id_RubroDel
Open curHijos
Fetch next from curHijos
into @Id_RubroxSubrubro, @Id_rubro, @Id_Subrubro
While @@FETCH_STATUS = 0
Begin
exec Sp_RubroBorraSubrubro @Id_SubRubro, @Id_UsuarioAuditoria
Fetch next from curHijos
into @Id_RubroxSubrubro, @Id_rubro, @Id_Subrubro
end
print 'delete from Rubro_x_Subrubro where Id_Subrubro = ' +
str(@Id_RubroDel)
set @Id_Accion = 3
exec SpAuditoria 14, 'Sp_RubroBorraSubrubro', @Id_RubroDel,
@Id_UsuarioAuditoria , @Id_Accion
close curHijos
deallocate curHijos
commit tran
Leer las respuestas