Sugerencia para no usar cursor

25/08/2008 - 19:31 por Waldo | Informe spam
Hola amigos, necesito auda para resolver lo siguiente,

Tengo un SELECT que abre un cursor, recupero un par de valores, los guardo
en varibles y luego tendria que pasarlos a un procedimiento almacenado.

Algo como

WHILE (@@FETCH_STATUS = 0)
BEGIN
FETCH NEXT FROM miCursor
INTO @var1, @var2
EXEC miProcedimiento @var1, @var2
END

Como podria pasar eso de otra forma para no usar cursor?

Algo como :

EXEC miProcedimiento ( SELECT campo1, campo2)

La forma :

INSERT INTO mi tabla
SELECT ( x, x , x )

no me sirve porque el sp 'miProcedimiento' en su interiror tiene un par de
SELECTs y llamadas a otros sp's para obtener una serie de datos que son
necesarios para hacer el INSERT final.

Ese seria el problema

Desde ya muchas gracias

Waldo

Preguntas similare

Leer las respuestas

#1 Rubén Garrigós
26/08/2008 - 09:10 | Informe spam
Hola Waldo,

Si el cursor únicamente recupera una fila de valores podrías asignar
directamente el valor de dichas variables en una select y luego utilizarlas
en el EXEC:

select @var1=campo1, @var2=campo2 from...
EXEC miProcedimiento @var1,var2

Rubén Garrigós
Solid Quality Mentors

"Waldo" wrote:

Hola amigos, necesito auda para resolver lo siguiente,

Tengo un SELECT que abre un cursor, recupero un par de valores, los guardo
en varibles y luego tendria que pasarlos a un procedimiento almacenado.

Algo como

WHILE (@@FETCH_STATUS = 0)
BEGIN
FETCH NEXT FROM miCursor
INTO @var1, @var2
EXEC miProcedimiento @var1, @var2
END

Como podria pasar eso de otra forma para no usar cursor?

Algo como :

EXEC miProcedimiento ( SELECT campo1, campo2)

La forma :

INSERT INTO mi tabla
SELECT ( x, x , x )

no me sirve porque el sp 'miProcedimiento' en su interiror tiene un par de
SELECTs y llamadas a otros sp's para obtener una serie de datos que son
necesarios para hacer el INSERT final.

Ese seria el problema

Desde ya muchas gracias

Waldo





Respuesta Responder a este mensaje
#2 Waldo
26/08/2008 - 15:12 | Informe spam
Gracias Ruben,
Pero en el SELECT podrian venir mas de una fila.

Segun veo, nadie recomienda el uso de cursores, es un tema que ya se habló,
pero mi cursor no creo que tenga mas de 5 filas, en ese caso seria muy malo
el desempeño ?

Saludos

Waldo
Respuesta Responder a este mensaje
#3 Rubén Garrigós
26/08/2008 - 18:46 | Informe spam
En tu caso particular no creo que debas preocuparte en exceso por un cursor
de solo lectura de 5 filas. Seguro que el código del procedimiento almacenado
que ejecutas será mucho más costoso que el cursor.

Como alternativa podrías quitar el cursor y volcar dicha tabla de parámetros
a una temporal e ir sacando los valores por ejemplo con un delete de fila en
fila usando la clausula OUTPUT como si de una pila se tratase dentro de un
bucle WHILE.

Yo no me preocuparía por ese pequeño cursor.

Rubén Garrigós
Solid Quality Mentors

"Waldo" wrote:

Gracias Ruben,
Pero en el SELECT podrian venir mas de una fila.

Segun veo, nadie recomienda el uso de cursores, es un tema que ya se habló,
pero mi cursor no creo que tenga mas de 5 filas, en ese caso seria muy malo
el desempeño ?

Saludos

Waldo



Respuesta Responder a este mensaje
#4 Isaias
26/08/2008 - 18:46 | Informe spam
Bueno, alguna vez vi en un articulo que para substituir cursores en 2005 se
recomienda CTE's, pero para 2000, tablas temporales.

SELECT * INTO #TEMPORAL FROM TUTABLA...
WHILE EXITS (SELECT CampoIndice FROM #TEMPORAL)
BEGIN
SELECT (ASIGNO VARIABLES) FROM #TEMPORAL
EXEC PROCEDIMIENTO @VARIABLES
DELETE #TEMPORAL WHERE CampoIndice = @CampoIndice
CONTINUE
END
Saludos
IIslas


"Waldo" wrote:

Gracias Ruben,
Pero en el SELECT podrian venir mas de una fila.

Segun veo, nadie recomienda el uso de cursores, es un tema que ya se habló,
pero mi cursor no creo que tenga mas de 5 filas, en ese caso seria muy malo
el desempeño ?

Saludos

Waldo



Respuesta Responder a este mensaje
#5 Isaias
26/08/2008 - 18:49 | Informe spam
ACTUALIZACION

Vi tu pregunta sobre si el rendimiento del cursor (servidor) se veria
afectado con 5 registros.

Creo que NO, nunca le afectaria con 5 registros en el cursor.
Saludos
IIslas


"Waldo" wrote:

Gracias Ruben,
Pero en el SELECT podrian venir mas de una fila.

Segun veo, nadie recomienda el uso de cursores, es un tema que ya se habló,
pero mi cursor no creo que tenga mas de 5 filas, en ese caso seria muy malo
el desempeño ?

Saludos

Waldo



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