Sql server 执行选择案例时出错
运行此查询时,出现以下错误: 程序sp_获取随机问题,第40行 当子查询未引入EXISTS时,只能在选择列表中指定一个表达式。 Msg 116,16级,状态1,程序sp_获取随机问题,第52行 当子查询未引入EXISTS时,只能在选择列表中指定一个表达式 这是一个存储过程,旨在给出随机问题,@easy、@medium、@hard是将被随机分配的问题数。 如果用户选择只给出一个@num,我将把这个数字除以3(3个困难),然后得到这些随机问题Sql server 执行选择案例时出错,sql-server,Sql Server,运行此查询时,出现以下错误: 程序sp_获取随机问题,第40行 当子查询未引入EXISTS时,只能在选择列表中指定一个表达式。 Msg 116,16级,状态1,程序sp_获取随机问题,第52行 当子查询未引入EXISTS时,只能在选择列表中指定一个表达式 这是一个存储过程,旨在给出随机问题,@easy、@medium、@hard是将被随机分配的问题数。 如果用户选择只给出一个@num,我将把这个数字除以3(3个困难),然后得到这些随机问题 SELECT case WHEN @num=0 THE
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
来控制流量,请尝试以下方法:
IF @num=0 THEN
BEGIN
SELECT top (@easy) *
FROM TBL_PERGUNTAS as p
WHERE p.category=1
ORDER BY NEWID()
UNION ALL
SELECT top (@medium) *
FROM TBL_PERGUNTAS as p
WHERE p.category=2
ORDER BY NEWID()
UNION ALL
SELECT top (@hard) *
FROM TBL_PERGUNTAS as p
WHERE p.category=3
ORDER BY NEWID())
END
ELSE
BEGIN
SELECT top (@num/3) *
FROM TBL_PERGUNTAS as p
WHERE p.category=1
ORDER BY NEWID()
UNION ALL
SELECT top (@num/3) *
FROM TBL_PERGUNTAS as p
WHERE p.category=2
ORDER BY NEWID()
UNION ALL
SELECT top (@num/3) *
FROM TBL_PERGUNTAS as p
WHERE p.category=3
ORDER BY NEWID())
END
案例不用于控制流量(必须返回单个值);如果您想要一组或另一组结果,请使用if/elsey您的代码至少可以说是一团糟。这里的问题是,您试图使用一个case表达式来控制不起作用的流。这里需要使用IF/ELSE逻辑。此外,还应避免使用sp_uu前缀。