Cuantas variables acepta un Cursor

11/10/2006 - 18:31 por the_ma3x | Informe spam
Esto es algo complicadillo...

Tengo una tabla con 56 campos. y necesito tomar los datos de 52
columnas (semanas del año) y mandarlos a ejecutar otro stored
procedure...
Entonces, con un par de cursores, uno para determinar que registro debo
de tomar en base a un parametro previo. (No tengo problema con eso),
ejecuto otro cursor en donde tomo todos los registros que cumplen con
la condición de ese parametro y voy leyendo uno por uno... pero por
cada registro, tengo que mandar llamar a este SP que realiza una serie
de calculos 52 veces.

El problema esta en que no hace nada, pero tampoco me manda ningún
error... entonces no entiendo que es lo que pasa y pense que era
factible que los cursores no soportaran 56 campos.

No pongo la instruccion completa porque son muchas lineas pero es
algo así...

DECLARE CALCULOS_CURSOR CURSOR FOR
SELECT * FROM TABLA_SEM WHERE DATO = @PARAMETRO ORDER BY DATO, ANIO,
TIPO ASC
OPEN CALCULOS_CURSOR
FETCH NEXT FROM CALCULOS_CURSOR INTO
@VARIABLE1, @VARIABLE2, (DE LA 1 HASTA LA 56)
WHILE @@FETCH_STATUS = 0
BEGIN
EXEC GENERA_CALCULOS @PARAMETRO, @DATOX, DATOX1
END

Y no más no funciona ni manda error... alguna sugerencia?

Preguntas similare

Leer las respuestas

#1 the_ma3x
11/10/2006 - 18:58 | Informe spam
Solucionado, el problema no era el cursor, era una variable mal
asignada...

Saludos
Respuesta Responder a este mensaje
#2 Isaias
11/10/2006 - 19:47 | Informe spam
Te recomiendo que te olvides de los cursores y los cambies por tablas
temporales.
Saludos
IIslas


"the_ma3x" wrote:

Solucionado, el problema no era el cursor, era una variable mal
asignada...

Saludos


Respuesta Responder a este mensaje
#3 Maxi
11/10/2006 - 20:26 | Informe spam
Yo recomiendo que se olvide de los cursres pero que no haga tampoco tablas
temporales sino que vuelva a pensar la consulta :)


Saludos

[Microsoft MVP SQL Server]
www.sqlgurus.org
Buenos Aires - Argentina
"Isaias" wrote in message
news:
Te recomiendo que te olvides de los cursores y los cambies por tablas
temporales.
Saludos
IIslas


"the_ma3x" wrote:

Solucionado, el problema no era el cursor, era una variable mal
asignada...

Saludos


Respuesta Responder a este mensaje
#4 the_ma3x
11/10/2006 - 20:39 | Informe spam
No creo que se factible olvidarme así de simple de los cursores, dado
que la complejidad del sistema requiere hacer una serie de calculos que
de no hacerse con cursores, se necesitarian muchas, pero muchas lineas
de código, además de no me imagino como me podrían servir la
creación de tablas temporales para hacer calculos sobre una misma
tabla. Si de por si, tengo stored procedures de más de 600 lineas que
funcionan con cursores, la creación de tablas temporales significaria
un uso absurdo de la capacidad del procesador.

He leido bastante al respecto de que los cursores no son tan
funcionales y que demoran más tiempo, pero también he notado que el
uso de tablas temporales, si bien puede ser más rapido, crea un pico
en el uso del procesador. Y para mi caso... eso sería un gran
problema, ya que el sistema no es lento, demora en mi laptop 7 segundos
para procesar 1000 registros. Y si eso se tarda en mi laptop, no creo
que tarde mucho más en un Servidor en forma.

Imagina que cargo un archivo (via bcp) y por cada registro que tenga
ese archivo, realizo un promedio de 100 calculos. Entre comparaciones,
inserciones y actualizaciones. Ahora, carga un archivo de 10,000
registros, multiplicalo y veremos que la cantidad de operaciones a
realizar es enorme.

Por desgracia la simplificación es imposible. Este sistema es una
simplificación de otro ya existente.

Saludos


Isaias wrote:
Te recomiendo que te olvides de los cursores y los cambies por tablas
temporales.
Saludos
IIslas


"the_ma3x" wrote:

> Solucionado, el problema no era el cursor, era una variable mal
> asignada...
>
> Saludos
>
>
Respuesta Responder a este mensaje
#5 Isaias
12/10/2006 - 07:05 | Informe spam
Los cursores se crean en memoria, por ende, esto le resta tiempo de respuesta
a tu servidor, entre mas grande el cursor, menos respuesta.

Yo tenia algo parecido a lo tuyo, subia la informacion con BCP a tablas de
paso, aplicaba mis calculos sobre dichas tablas y enviaba los registros a sus
tablas destino, nunca tuve problema.
Saludos
IIslas


"the_ma3x" wrote:

No creo que se factible olvidarme así de simple de los cursores, dado
que la complejidad del sistema requiere hacer una serie de calculos que
de no hacerse con cursores, se necesitarian muchas, pero muchas lineas
de código, además de no me imagino como me podrían servir la
creación de tablas temporales para hacer calculos sobre una misma
tabla. Si de por si, tengo stored procedures de más de 600 lineas que
funcionan con cursores, la creación de tablas temporales significaria
un uso absurdo de la capacidad del procesador.

He leido bastante al respecto de que los cursores no son tan
funcionales y que demoran más tiempo, pero también he notado que el
uso de tablas temporales, si bien puede ser más rapido, crea un pico
en el uso del procesador. Y para mi caso... eso sería un gran
problema, ya que el sistema no es lento, demora en mi laptop 7 segundos
para procesar 1000 registros. Y si eso se tarda en mi laptop, no creo
que tarde mucho más en un Servidor en forma.

Imagina que cargo un archivo (via bcp) y por cada registro que tenga
ese archivo, realizo un promedio de 100 calculos. Entre comparaciones,
inserciones y actualizaciones. Ahora, carga un archivo de 10,000
registros, multiplicalo y veremos que la cantidad de operaciones a
realizar es enorme.

Por desgracia la simplificación es imposible. Este sistema es una
simplificación de otro ya existente.

Saludos


Isaias wrote:
> Te recomiendo que te olvides de los cursores y los cambies por tablas
> temporales.
> Saludos
> IIslas
>
>
> "the_ma3x" wrote:
>
> > Solucionado, el problema no era el cursor, era una variable mal
> > asignada...
> >
> > Saludos
> >
> >


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