Seguimos buscando a Arshak. Ayudanos compartiendo!
Encuesta no oficial de docentes
Resultados de la encuesta no oficial de docentes
Probaste el SIGA Helper?

Donar $100 Donar $200 Donar $500 Donar mensualmente


Enviar respuesta 
 
Calificación:
  • 0 votos - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Buscar en el tema
[Ayuda] Cursores en T-SQL
Autor Mensaje
Silvina Paula Sin conexión
Militante
:)
***

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 76
Agradecimientos dados: 7
Agradecimientos: 1 en 1 posts
Registro en: Nov 2010
Facebook LinkedIn
Mensaje: #1
[Ayuda] Cursores en T-SQL Otro Gestión de Datos
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
11-12-2016 20:22
Envíale un email Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Martin. Sin conexión
Presidente del CEIT
Enjoy it !
********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 1.380
Agradecimientos dados: 88
Agradecimientos: 296 en 137 posts
Registro en: Oct 2011
Mensaje: #2
RE: [Ayuda] Cursores en T-SQL
Hola!,
El error te lo devuelve el SQL ya que vos podes asignar un solo elemento a cada variable y no varios. En otras palabras, si tu asignación depende de un resultado de una query debes asegurarte que devuelve 1 solo registro.

Sin mas aclaración, el error puede estar acá:
SET @Pregunta = (SELECT pregunta FROM PARCIAL.Logs)

Si ese select devuelve muchos registros, no te va a permitir realizar la asignación.

Cualquier cosa avisame.

[Imagen: jQJfyBGh9SOmZ.png]
11-12-2016 20:42
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Silvina Paula Sin conexión
Militante
:)
***

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 76
Agradecimientos dados: 7
Agradecimientos: 1 en 1 posts
Registro en: Nov 2010
Facebook LinkedIn
Mensaje: #3
RE: [Ayuda] Cursores en T-SQL
Lo que quise hacer ahí es asignarle el valor de pregunta del próximo registro que recorre el cursor. Cómo debería hacerlo?

love Sil kisslove
11-12-2016 22:09
Envíale un email Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
JuanPadilla Sin conexión
Empleado del buffet
Aprendiendo a Pensar
*

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 16
Agradecimientos dados: 33
Agradecimientos: 21 en 4 posts
Registro en: Aug 2013
Facebook
Mensaje: #4
RE: [Ayuda] Cursores en T-SQL
(11-12-2016 22:09)Silvina Paula escribió:  Lo que quise hacer ahí es asignarle el valor de pregunta del próximo registro que recorre el cursor. Cómo debería hacerlo?

Si queres que lo lea el cursor, bajo mi consideracion, tendrias que cambiar el query generador del cursor,

FOR SELECT P.idPregunta, P.pregunta
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

FETCH Cursor_Cantidades INTO @Cant, @Pregunta

11-12-2016 23:06
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Martin. Sin conexión
Presidente del CEIT
Enjoy it !
********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 1.380
Agradecimientos dados: 88
Agradecimientos: 296 en 137 posts
Registro en: Oct 2011
Mensaje: #5
RE: [Ayuda] Cursores en T-SQL
(11-12-2016 22:09)Silvina Paula escribió:  Lo que quise hacer ahí es asignarle el valor de pregunta del próximo registro que recorre el cursor. Cómo debería hacerlo?

Si queres pasanos el enunciado del ejercicio y entre todos te ayudamos a resolverlo.
Para hacer eso debes poner un WHERE en la asignación obteniendo la pregunta para un ID de Pregunta dado.
Para lo que tenes hecho sería:



SET @Pregunta = (SELECT pregunta FROM PARCIAL.Logs WHERE PREGUNTA = @Cant)



[Imagen: jQJfyBGh9SOmZ.png]
(Este mensaje fue modificado por última vez en: 11-12-2016 23:13 por Martin..)
11-12-2016 23:11
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Silvina Paula Sin conexión
Militante
:)
***

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 76
Agradecimientos dados: 7
Agradecimientos: 1 en 1 posts
Registro en: Nov 2010
Facebook LinkedIn
Mensaje: #6
RE: [Ayuda] Cursores en T-SQL
Ahí lo pude solucionar, ya funciona. Les dejo el script actualizado:

USE [PARCIAL ]
GO

-- Declaración Variables a utilizar
DECLARE @Cant INT
SET @Cant = 0
DECLARE @Pregunta INT
DECLARE @PregAnterior INT
SET @PregAnterior = (SELECT TOP 1 pregunta FROM PARCIAL.Logs)
DECLARE @EsCorrecta CHAR (1)
SET @EsCorrecta = (SELECT TOP 1 esCorrecta FROM PARCIAL.Respuestas R INNER JOIN PARCIAL.Logs L
ON L.respuesta=R.idRespuesta WHERE R.pregunta = 2)
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 L.pregunta
FROM PARCIAL.Logs AS L INNER JOIN PARCIAL.Respuestas AS R
ON R.idRespuesta= L.respuesta
WHERE R.esCorrecta = @EsCorrecta
ORDER BY L.fechaHora

-- Apertura del cursor
OPEN Cursor_Cantidades

-- Lectura de la primera fila del cursor
FETCH Cursor_Cantidades INTO @Pregunta
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 @Pregunta

-- Fin del bucle WHILE
END

IF (@Maximo <= @Cant)
SET Maximo = @Cant

-- Cierra el cursor
CLOSE Cursor_Cantidades

PRINT Maximo

-- Liberar el cursor
Deallocate Cursor_Cantidades

love Sil kisslove
13-12-2016 22:07
Envíale un email Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
gabrielarce Sin conexión
Militante
Benditos finales..
***

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 99
Agradecimientos dados: 62
Agradecimientos: 19 en 11 posts
Registro en: Jan 2010
Mensaje: #7
RE: [Ayuda] Cursores en T-SQL
hola! tenes el enunciado del parcial?
17-11-2017 17:40
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Buscar en el tema
Enviar respuesta 




Usuario(s) navegando en este tema: 2 invitado(s)