11-12-2016, 20:22
Buenas tardes,
Estoy practicando crear cursores en T-SQL y el sql server me devuelve el siguiente mensaje de error:
"La subconsulta ha devuelto más de un valor, lo que no es correcto cuando va a continuación de =, !=, <, <=, >, >= o cuando se utiliza como expresión."
Necesito saber qué es lo que estoy haciendo mal.
El Script que ejecuté es el siguiente:
USE [PARCIAL ]
GO
-- Declaración Variables a utilizar
DECLARE @Cant INT
SET @Cant = 0
DECLARE @Pregunta INT
SET @Pregunta = (SELECT TOP 1 pregunta FROM PARCIAL.Logs)
DECLARE @PregAnterior INT
SET @PregAnterior = @Pregunta
DECLARE @EsCorrecta CHAR (1)
SET @EsCorrecta = (SELECT esCorrecta FROM PARCIAL.Respuestas WHERE pregunta = @Pregunta)
DECLARE @CondAnterior CHAR (1)
SET @CondAnterior = @Cant
DECLARE Maximo INT
SET Maximo = 0
-- Declaración del cursor
DECLARE Cursor_Cantidades CURSOR GLOBAL
SCROLL
FOR SELECT P.idPregunta
FROM PARCIAL.Preguntas AS P INNER JOIN PARCIAL.Logs AS L
ON L.pregunta = P.idPregunta INNER JOIN PARCIAL.Respuestas AS R
ON R.idRespuesta= L.respuesta
ORDER BY L.fechaHora
-- Apertura del cursor
OPEN Cursor_Cantidades
-- Lectura de la primera fila del cursor
FETCH Cursor_Cantidades INTO @Cant
WHILE ((@@FETCH_STATUS = 0) AND (@CondAnterior=@EsCorrecta))
BEGIN
IF (@PregAnterior=@Pregunta)
SET @Cant = @Cant + 1
-- Lectura de la siguiente fila de un cursor
FETCH Cursor_Cantidades INTO @Cant
SET @Pregunta = (SELECT pregunta FROM PARCIAL.Logs)
-- Fin del bucle WHILE
END
IF (@Maximo <= @Cant)
SET Maximo = @Cant
-- Cierra el cursor
CLOSE Cursor_Cantidades
Estoy practicando crear cursores en T-SQL y el sql server me devuelve el siguiente mensaje de error:
"La subconsulta ha devuelto más de un valor, lo que no es correcto cuando va a continuación de =, !=, <, <=, >, >= o cuando se utiliza como expresión."
Necesito saber qué es lo que estoy haciendo mal.
El Script que ejecuté es el siguiente:
USE [PARCIAL ]
GO
-- Declaración Variables a utilizar
DECLARE @Cant INT
SET @Cant = 0
DECLARE @Pregunta INT
SET @Pregunta = (SELECT TOP 1 pregunta FROM PARCIAL.Logs)
DECLARE @PregAnterior INT
SET @PregAnterior = @Pregunta
DECLARE @EsCorrecta CHAR (1)
SET @EsCorrecta = (SELECT esCorrecta FROM PARCIAL.Respuestas WHERE pregunta = @Pregunta)
DECLARE @CondAnterior CHAR (1)
SET @CondAnterior = @Cant
DECLARE Maximo INT
SET Maximo = 0
-- Declaración del cursor
DECLARE Cursor_Cantidades CURSOR GLOBAL
SCROLL
FOR SELECT P.idPregunta
FROM PARCIAL.Preguntas AS P INNER JOIN PARCIAL.Logs AS L
ON L.pregunta = P.idPregunta INNER JOIN PARCIAL.Respuestas AS R
ON R.idRespuesta= L.respuesta
ORDER BY L.fechaHora
-- Apertura del cursor
OPEN Cursor_Cantidades
-- Lectura de la primera fila del cursor
FETCH Cursor_Cantidades INTO @Cant
WHILE ((@@FETCH_STATUS = 0) AND (@CondAnterior=@EsCorrecta))
BEGIN
IF (@PregAnterior=@Pregunta)
SET @Cant = @Cant + 1
-- Lectura de la siguiente fila de un cursor
FETCH Cursor_Cantidades INTO @Cant
SET @Pregunta = (SELECT pregunta FROM PARCIAL.Logs)
-- Fin del bucle WHILE
END
IF (@Maximo <= @Cant)
SET Maximo = @Cant
-- Cierra el cursor
CLOSE Cursor_Cantidades