Doble cursor

06/08/2003 - 22:13 por Marino | Informe spam
Amigos del grupo, me gustaria saber como manejar un cursor
anidado dentro de otro en un procedimiento. Les envio
parte del codigo para que entiendan que quiero hacer.
Gracias por cualquier ayuda.
CREATE PROCEDURE ACT_COMP
@BAN INT = 0
AS

DECLARE C_ACT CURSOR FOR SELECT DSecundario_1, Documento
FROM Tabla_Clasificación
DECLARE C_COM CURSOR FOR SELECT Codigo FROM
Tabla_Complicacion
DECLARE @DSecundario_1 CHAR, @CEDULA INT
DECLARE @Codigo CHAR

OPEN C_ACT
FETCH NEXT FROM C_ACT INTO @DSecundario_1, @CEDULA
SELECT @BAN = 0
WHILE (@@fetch_status <> -1)
BEGIN
IF (@@fetch_status <> -2)
BEGIN
OPEN C_COM
FETCH NEXT FROM C_COM INTO @Codigo
WHILE (@@fetch_status <> -1) --AND @BAN
<>1
BEGIN
IF (@@fetch_status <> -2) AND @BAN
<>1
BEGIN
IF @DSecundario_1 = @Codigo
BEGIN
PRINT 'Registro
actualizado para ' + CONVERT(VARCHAR(30),@CEDULA)
UPDATE
Tabla_Clasificación
SET Complicacion =
1
WHERE CURRENT OF
C_ACT
SELECT @BAN = 1
FETCH NEXT FROM
C_COM INTO @Codigo
END
END
FETCH NEXT FROM C_COM INTO @Codigo
END
END
CLOSE C_COM
DEALLOCATE C_COM
FETCH NEXT FROM C_ACT INTO @DSecundario_1, @CEDULA
END
CLOSE C_ACT
DEALLOCATE C_ACT
GO

Preguntas similare

Leer las respuestas

#1 Isaías
06/08/2003 - 23:29 | Informe spam
Hola

¿Podria decirnos que desea hacer con las 2 tablas que
maneja en sus "cursores"?

Gracias.
Respuesta Responder a este mensaje
#2 Miguel Egea
07/08/2003 - 13:11 | Informe spam
¿quieres actualizar a 1 el valor de una tabla si se cumpre algo en una tabla
relacionada?, postea lo que quieres hacer, eso se puede con una sola
instrucción update y será mucho más rápida en ejecutarse

Espero que te sirva.

Saludos
Miguel Egea
http://www.portalsql.com
Sql-Server MVP
"Marino" escribió en el mensaje
news:021801c35c57$3cc269b0$
Amigos del grupo, me gustaria saber como manejar un cursor
anidado dentro de otro en un procedimiento. Les envio
parte del codigo para que entiendan que quiero hacer.
Gracias por cualquier ayuda.
CREATE PROCEDURE ACT_COMP
@BAN INT = 0
AS

DECLARE C_ACT CURSOR FOR SELECT DSecundario_1, Documento
FROM Tabla_Clasificación
DECLARE C_COM CURSOR FOR SELECT Codigo FROM
Tabla_Complicacion
DECLARE @DSecundario_1 CHAR, @CEDULA INT
DECLARE @Codigo CHAR

OPEN C_ACT
FETCH NEXT FROM C_ACT INTO @DSecundario_1, @CEDULA
SELECT @BAN = 0
WHILE (@@fetch_status <> -1)
BEGIN
IF (@@fetch_status <> -2)
BEGIN
OPEN C_COM
FETCH NEXT FROM C_COM INTO @Codigo
WHILE (@@fetch_status <> -1) --AND @BAN
<>1
BEGIN
IF (@@fetch_status <> -2) AND @BAN
<>1
BEGIN
IF @DSecundario_1 = @Codigo
BEGIN
PRINT 'Registro
actualizado para ' + CONVERT(VARCHAR(30),@CEDULA)
UPDATE
Tabla_Clasificación
SET Complicacion 1
WHERE CURRENT OF
C_ACT
SELECT @BAN = 1
FETCH NEXT FROM
C_COM INTO @Codigo
END
END
FETCH NEXT FROM C_COM INTO @Codigo
END
END
CLOSE C_COM
DEALLOCATE C_COM
FETCH NEXT FROM C_ACT INTO @DSecundario_1, @CEDULA
END
CLOSE C_ACT
DEALLOCATE C_ACT
GO
Respuesta Responder a este mensaje
#3 Emilio Boucau
08/08/2003 - 20:20 | Informe spam
Miguel,

al final, Marino resolvio su problema asi:

UPDATE TABLA_1

SET COMPLICACION = TABLA_2.COMPLICACION

FROM TABLA_1

INNER JOIN TABLA_2

ON TABLA_1.DIAGNOSTICO = TABLA_2.DIAGNOSTICO

Saludos !

Emilio Boucau
Microsoft MVP SQL Server
http://www.portalsql.com
PASS Spanish Group
http://www.sqlpass.org

Buenos Aires - Argentina
Respuesta Responder a este mensaje
#4 Miguel Egea
11/08/2003 - 09:14 | Informe spam
pues eso es lo que yo pensaba ;-)

Gracias por la aclaración emilio

Espero que te sirva.

Saludos
Miguel Egea
http://www.portalsql.com
Sql-Server MVP
"Emilio Boucau" escribió en el mensaje
news:
Miguel,

al final, Marino resolvio su problema asi:

UPDATE TABLA_1

SET COMPLICACION = TABLA_2.COMPLICACION

FROM TABLA_1

INNER JOIN TABLA_2

ON TABLA_1.DIAGNOSTICO = TABLA_2.DIAGNOSTICO

Saludos !

Emilio Boucau
Microsoft MVP SQL Server
http://www.portalsql.com
PASS Spanish Group
http://www.sqlpass.org

Buenos Aires - Argentina


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