Llamada recursiva para balances de cuentas

21/01/2005 - 14:04 por Berta Gomez | Informe spam
hola necesito sacar unos balances de contabilidad pero como es lo mas logico
en la tabla solo guardo los de las cuentas auxiliares.

CuentaAux, AñoMes, Balance
1.1.1 , 200402, 33434
1.2 , 200403, 343434

Pero cada cuenta auxiliar tiene una cuenta padre y esta puede tener otra
cuenta padre hasta N niveles.


1 Cuenta 1
1.1 Cuenta 1.1
1.1.1 Cuenta 1.1.1
1.2 Cuenta 1.2
1.3 Cuenta 1.3
1.3.1 Cuenta 1.3.1


Y debo sacar los balances de todas las controles. Es veo que implica un SP
con una llamada recursiva.
Se puede hacer ? Pense hacerlo mejor en la aplicacion pero en caso de que
se pueda en SP, es conveniente hacerlo en el servidor ?


Gracias

Preguntas similare

Leer las respuestas

#1 Tinoco
21/01/2005 - 14:43 | Informe spam
Hola berta,

Si se puede crear un SP recursivo, aunque no me gusta mucho la idea.

Lo otro que puedes hacer es utilizar una tabla temporal, insertar en ella
las cuentas padre y por medio de un WHILE insertar los hijos repetidamente en
la tabla temporal.

Esta clase de procesos son mucho mas eficientes en el Servidor de datos.

Hermilson Tinoco
Colombia

"Berta Gomez" wrote:

hola necesito sacar unos balances de contabilidad pero como es lo mas logico
en la tabla solo guardo los de las cuentas auxiliares.

CuentaAux, AñoMes, Balance
1.1.1 , 200402, 33434
1.2 , 200403, 343434

Pero cada cuenta auxiliar tiene una cuenta padre y esta puede tener otra
cuenta padre hasta N niveles.


1 Cuenta 1
1.1 Cuenta 1.1
1.1.1 Cuenta 1.1.1
1.2 Cuenta 1.2
1.3 Cuenta 1.3
1.3.1 Cuenta 1.3.1


Y debo sacar los balances de todas las controles. Es veo que implica un SP
con una llamada recursiva.
Se puede hacer ? Pense hacerlo mejor en la aplicacion pero en caso de que
se pueda en SP, es conveniente hacerlo en el servidor ?


Gracias




Respuesta Responder a este mensaje
#2 Gustavo Larriera [MVP]
21/01/2005 - 14:47 | Informe spam
/* pego un mensaje antiguo que habia colocado en este foro */

La recursión en SQL 2000 es una ilusión óptica :-) Deberás implementar
un
algoritmo iterativo.

En SQL Server 2005 las consultas sobre datos recursivos se podrán hacer
con
bastante simpleza usando las Common Table Expressions (CTE). Mientras
tanto
en SQL Server 2000, hay que hacerlo manualmente. Hay muchos articulos
que
explican como resolver esos temas, estos son algunos:

More Trees & Hierarchies in SQL
http://www.sqlteam.com/item.asp?ItemIDˆ66

SQL Graph Algorithms
http://willets.org/sqlgraphs.html

Representing Trees in a relational DB
http://fungus.teststation.com/~jon/treehandling/TreeHandling.htm


El siguiente algoritmo lo usé de ejemplo en una conferencia, busca
recursivamente los empleados de un determinado jefe usando la tabla
Employees de la base Northwind. Espero te sirva de inspiración.

USE northwind
GO

DECLARE @employeeMgr nchar(5)
SET @employeeMgr = '2'
DECLARE @RowsAdded int
DECLARE @reports TABLE (employeeid nchar(5) primary key, lastname
nvarchar(50) NOT NULL, reportsto nchar(5), title nvarchar(30), processed
tinyint default 0)

jefe
INSERT @reports
SELECT employeeid, lastname, reportsto, title, 0
FROM employees
WHERE employeeid = @employeeMgr

SET @RowsAdded = @@rowcount

WHILE @RowsAdded > 0
BEGIN
UPDATE @reports SET processed = 1 WHERE processed = 0

INSERT @reports
SELECT e.employeeid, e.lastname, e.reportsto, e.title, 0
FROM employees e, @reports r
WHERE e.reportsto=r.employeeid and e.reportsto <> e.employeeid and
r.processed = 1

SET @RowsAdded = @@rowcount
UPDATE @reports SET processed = 2 WHERE processed = 1
END

SELECT * FROM @reports

Gustavo Larriera, MVP
Uruguay LatAm
http://sqljunkies.com/weblog/gux/
Este mensaje se proporciona "COMO ESTA" sin garantias y no otorga ningun
derecho / This posting is provided "AS IS" with no warranties, and
confers no rights.



"Berta Gomez" wrote in message
news::
hola necesito sacar unos balances de contabilidad pero como es lo mas
logico
en la tabla solo guardo los de las cuentas auxiliares.

CuentaAux, AñoMes, Balance
1.1.1 , 200402, 33434
1.2 , 200403, 343434

Pero cada cuenta auxiliar tiene una cuenta padre y esta puede tener otra
cuenta padre hasta N niveles.


1 Cuenta 1
1.1 Cuenta 1.1
1.1.1 Cuenta 1.1.1
1.2 Cuenta 1.2
1.3 Cuenta 1.3
1.3.1 Cuenta 1.3.1


Y debo sacar los balances de todas las controles. Es veo que implica un
SP
con una llamada recursiva.
Se puede hacer ? Pense hacerlo mejor en la aplicacion pero en caso de
que
se pueda en SP, es conveniente hacerlo en el servidor ?


Gracias
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida