Когда я запускаю этот запрос, я получаю эту ошибку:Ошибка при excuting ВЫБЕРИТЕ СЛУЧАЙ
Procedure sp_GET_RANDOM_QUESTIONS, Line 40 Only one expression can be specified in the select list when the subquery is not introduced with EXISTS. Msg 116, Level 16, State 1, Procedure sp_GET_RANDOM_QUESTIONS, Line 52 Only one expression can be specified in the select list when the subquery is not introduced with EXISTS.
Это хранимая процедура, которая предназначена, чтобы дать случайные вопросы, в @easy, @medium, @hard являетесь количество вопросов, которые будут рандомизированы. Если пользователь хочет просто дать @num, я разделим это число на 3 (три проблемы) и получаю эти случайные вопросы.
SELECT case
WHEN @num=0 THEN (
SELECT * FROM (
SELECT top (@easy) * from TBL_PERGUNTAS as p where p.category=1 order by NEWID()) as a
UNION ALL SELECT * FROM
(SELECT top (@medium) * from TBL_PERGUNTAS as p where p.category=2 order by NEWID()) as b
UNION ALL SELECT * FROM
(SELECT top (@hard) * from TBL_PERGUNTAS as p where p.category=3 order by NEWID()) as c)
else (
SELECT * FROM
(SELECT top (@num/3) * from TBL_PERGUNTAS as p where p.category=1 order by NEWID()) as a
UNION ALL SELECT * FROM
(SELECT top (@num/3) * from TBL_PERGUNTAS as p where p.category=2 order by NEWID()) as b
UNION ALL SELECT * FROM
(SELECT top (@num/3) * from TBL_PERGUNTAS as p where p.category=3 order by NEWID()) as c)
END
СЛУЧАЙ не для контроля, из-потока (он должен возвращать одно значение); если вы хотите, чтобы один или другой набор результатов использовал IF/ELSE –
Ваш код - беспорядок, если не сказать больше. Проблема здесь заключается в том, что вы пытаетесь использовать выражение case для управления потоком, который не работает. Здесь вам нужно использовать логику IF/ELSE. Также вы должны избегать префикса sp_. http://sqlperformance.com/2012/10/t-sql-queries/sp_prefix –