我以前在这里得到了很大的帮助,所以我希望有人可以帮我解决这个问题。任何人都可以告诉我为什么查询#1导致错误“子查询返回超过1个值...”但查询#2工作正常?由于我使用“IN”代替“=”来限定结果,我认为多个值是可以接受的。
关于如何实现这一目标的任何建议?
--Query #1
SELECT _Column1_ from _View1_
WHERE
_Column2_ IN( CASE
WHEN ISNUMERIC(1000110) = 1 AND LEN(1000110) > 3
THEN (
SELECT _Column2_
FROM _Table1_
WHERE _Column2_ = CONVERT(Int, LEFT(1000110, 4))
OR _Column3_ = CONVERT(Int, LEFT(1000110, 4))
)
WHEN ISNUMERIC(1000110) = 1 AND LEN(1000110) <= 3
THEN 0
ELSE (SELECT _Column2_ from _Table1_)
END)
注意:在最终查询中,1000110实际上是一个用户名变量,可以返回数字用户名或字母数字
--Query #2
WHEN ISNUMERIC(1000110) = 1 AND LEN(1000110) > 3
THEN CONVERT(Int, LEFT(1000110, 4))
WHEN ISNUMERIC(1000110) = 1 AND LEN(1000110) <= 3
THEN 0
ELSE (SELECT _Column2_ from _Table1_)
END)
答案 0 :(得分:2)
SELECT _Column2_ from _Table1_
最有可能返回多个结果。在这种情况下,只允许一个值。
作为测试,请尝试SELECT TOP(1) _Column2_ from _Table1_