我已经编写了一个sql查询,检查 @Collegein 不等于0,如果是这样的话,那么根据其他方式获取college_code适用于所有大学。我已经使用过这种技术但从未尝试过对于多元化。我在"其中"
College_code in (CASE WHEN @Collegein != '0' THEN (SELECT items FROM dbo.Split(@Collegein, ',')) ELSE College_code END)
这适用于 @Collegein =' 1' ,但 @Collegein =' 1,2' 失败, error子查询返回多个值。
虽然以下代码适用于 @Collegein =' 1,2'
College_code in (select * from dbo.Split(@Collegein ,','))
对于这种或替代解决方案,可能的解决方案是什么?还有一件事,为什么" in"不在这里工作
答案 0 :(得分:0)
这不起作用。虽然IN
明确处理多个值,但CASE
只能返回一个值。因此,您的案例中的子查询应返回单个值,这就是您收到错误的原因。你必须在这里使用OR
:
@Collegein = '0'
OR
(
@Collegein != '0'
AND College_code IN(SELECT items FROM dbo.Split(@Collegein, ','))
)
答案 1 :(得分:0)
试试这个:
@Collegein = '0'
OR
EXISTS(SELECT items FROM dbo.Split(@Collegein, ',') WHERE Items = College_code)
添加(基于托马斯的答案):
@Collegein = '0'
OR
College_code IN(SELECT items FROM dbo.Split(@Collegein, ','))