我的存储过程存在问题。
一般的想法是能够选择4个参数(可以选择或不选择)并返回正确的结果。因为我真的不能使用2个参数(校园ID是强制性的),我没有费心去做其他的。
问题在于我的where子句
WHERE ac.AC_Campus_ID = @CampusID AND
(
ac.AC_College_ID IN (CASE @CollegeID
WHEN 0 THEN (select distinct AC_College_ID from AC_Academic_Choice)
ELSE @CollegeID
END))
这是一个例子。我选择校园ID为1,我选择了大学ID为1.查询将返回这两个参数的结果。
当我选择校园ID为1且大学ID为0时,我得到“子查询返回的值超过1。当子查询跟随=,!=,<,< =,&gt时,不允许这样做;,> =或当子查询用作表达式时。“
当我做第二次输入时,我想要系统中每个大学id的所有结果。
有关如何使其发挥作用的任何想法?
谢谢!
答案 0 :(得分:3)
这是重写它以获得所需结果的一种方法:
...
WHERE ac.AC_College_ID IN (
SELECT DISTINCT AC_College_ID
FROM AC_Academic_Choice
WHERE AC_College_ID =
CASE @CollegeID
WHEN 0
THEN AC_College_ID
ELSE @CollegeID
END
)
答案 1 :(得分:0)
尝试:
WHERE ac.AC_Campus_ID = @CampusID AND
(SELECT 1 WHERE ac.AC_College_ID IN
(CASE @CollegeID
WHEN 0 THEN (select distinct AC_College_ID from AC_Academic_Choice)
ELSE @CollegeID
END
)
)