eliminar Cursor..¿?

28/08/2003 - 00:18 por Emerson | Informe spam
siempre les leo que es posible eliminar los cursores, pero no veo como
hacerlo... es por medio de alguna query más poderosa, por sentencias que no
conozco (otra dimensión, desconocida???)
sólo bromeo, la idea aprender a ver las posibilidades de desprenderme de los
cursores, si es necesario.

aquí va uno, no sé si se puede traducir a algo sin cursor:

Set @cont = 1
Set @cursor_empresa = CURSOR FOR SELECT id FROM act_Empresa
OPEN @cursor_empresa

FETCH next FROM @cursor_empresa INTO @id_empresa /*lo tengo afuera porque
adentro me daba algunos problemas*/

WHILE (@@fetch_status = 0)
BEGIN

SELECT @paso_cont = COUNT(A.id)
FROM act_Alumno A INNER JOIN act_EvaluacionAlumno EA ON A.id EA.IdAlumno INNER JOIN act_Evaluacion E ON EA.IdEv = E.Id
WHERE (A.idempresa = @id_empresa)

set @cont = @cont + 1
FETCH NEXT FROM @cursor_empresa INTO @id_empresa
end
END

CLOSE @cursor_empresa
DEALLOCATE @cursor_empresa


Muy agredecido, desde ya.

Emerson
 

Leer las respuestas

#1 Carlos Sacristan
28/08/2003 - 08:27 | Informe spam
Emerson, sinceramente no sé qué es lo que estás intentando hacer en ese
script: abres un cursor para ir contando el nº de registros por cada una de
las empresas cuando eso lo puedes hacer con una consulta de agregados (GROUP
BY A.idEmpresa); por otro lado vas sumando uno a una variable por cada una
de las pasadas que da el cursor, cuando eso lo que es en realidad es el nº
de registros (ROWCOUNT) de la sentencia que te acabo de comentar...

¿Podrías explicar un poco más qué es lo que pretendes conseguir con ese
cursor?.

P.D.: se aprecia la inclusión de sentencias DDL y si también pones
algunos registros de ejemplos, mejor que mejor. Será más sencillo ayudarte



Un saludo

-
"Sólo sé que no sé nada. " (Sócrates)

Por favor, responder únicamente al foro

(Guía de netiquette del foro)
http://www.helpdna.net/bosqlfaq00.htm
http://perso.wanadoo.es/rubenvigon/foro

(FAQ's de SQL Server)
http://support.microsoft.com/defaul.../70faq.asp
http://www.helpdna.net/bosqlfaq.htm

"Emerson" escribió en el mensaje
news:
siempre les leo que es posible eliminar los cursores, pero no veo como
hacerlo... es por medio de alguna query más poderosa, por sentencias que


no
conozco (otra dimensión, desconocida???)
sólo bromeo, la idea aprender a ver las posibilidades de desprenderme de


los
cursores, si es necesario.

aquí va uno, no sé si se puede traducir a algo sin cursor:

Set @cont = 1
Set @cursor_empresa = CURSOR FOR SELECT id FROM act_Empresa
OPEN @cursor_empresa

FETCH next FROM @cursor_empresa INTO @id_empresa /*lo tengo afuera porque
adentro me daba algunos problemas*/

WHILE (@@fetch_status = 0)
BEGIN

SELECT @paso_cont = COUNT(A.id)
FROM act_Alumno A INNER JOIN act_EvaluacionAlumno EA ON A.id > EA.IdAlumno INNER JOIN act_Evaluacion E ON EA.IdEv = E.Id
WHERE (A.idempresa = @id_empresa)

set @cont = @cont + 1
FETCH NEXT FROM @cursor_empresa INTO @id_empresa
end
END

CLOSE @cursor_empresa
DEALLOCATE @cursor_empresa


Muy agredecido, desde ya.

Emerson


Preguntas similares