Hola:
Necesito crear un procedimiento que me seleccione una pregunta para un
examen de la tabla EV_Preguntas. Pero no puedo usar cursores. Así que se me
ocurrió la idea de hacer un select con un top de X elementos, ordenandolo en
orden inverso, y hacer un select de ese select anterior con un top 1,con lo
que se mostrará sólo el Id de la pregunta seleccionada...
Pues nada, me puse manos a la obra pero...
Al intentar hacer lo siguiente en el procedimiento almacenado me da un
error:
create procedure...
[...]
declare @num_preguntas as int
declare @Cod_pregunta as char(4)
[...]
Set @Num_preguntas = ( Rand() *100 ) +1 -- Seleccionamos número al azar
[...]
select top 1 @Cod_Pregunta = Id
from EV_Preguntas
where Id in
(Select top @Num_preguntas Id
from EV_Preguntas
order by Id Desc)
[...]
al indicar top @Num_preguntas me dice que sintaxis incorrecta, pero si pongo
un número, sin problemas...
Pues opté por la siguiente solución:
Crear una cadena con la sentencia:
declare @cadena as Varchar(300)
Asignar la sentencia sql:
set @cadena = 'Select top 1 ... '
Y donde vaya @Num_preguntas hacer:
... ' + Cast (@Num_preguntas as Varchar) + ' ...
y ejecutarla:
exec (@Cadena)
El problema es que me dice que debo declarar la variable @Cod_Pregunta...
He pensado en quitar de la cadena lo siguiente:
select top 1 @Cod_pregunta = id from ...
y dejarlo así:
select top 1 Id from
pero necesito recoger el Id devuelto por el select y almacenarlo en
@Cod_Pregunta...
Alguna idea de cómo hacerlo?
Saludos y gracias
Jonathan Chacón
Leer las respuestas