你能告诉我为什么会收到这个错误吗?
我认为没有使用任何表达式“=”?
SELECT *
FROM
(SELECT
ROW_NUMBER() OVER(ORDER BY
CASE WHEN @SortType = '1' THEN mt.Ad END ASC,
CASE WHEN @SortType = '2' THEN mt.Ad END DESC,
CASE WHEN @SortType = '3' THEN mt.Fiyat END ASC,
CASE WHEN @SortType = '4' THEN mt.Fiyat END DESC) AS RowNr, *
FROM @MainTable mt
WHERE mt.Fiyat > @MinPrice AND mt.Fiyat < @MaxPrice
AND mt.MarkaId IN (CASE WHEN @BrandFilter != ''
THEN (SELECT bf.Data FROM dbo.Split(@BrandFilter, ',') bf)
ELSE (mt.MarkaId)
END )
) Result
WHERE
RowNr > ((@PageNr-1) * 10) AND RowNr <= ((@PageNr) * 10)
SQL Server提供此错误;
子查询返回的值超过1。当子查询遵循=,!=,&lt;,&lt; =,&gt;,&gt; =或子查询用作表达式时,不允许这样做。
我的split函数返回多行表,但我写了IN
而不是=
由于
答案 0 :(得分:6)
CASE WHEN @BrandFilter != '' THEN
子句需要单个标量值,但您调用的UDF可能会返回多行。
答案 1 :(得分:2)
您不能以这种方式使用CASE
。看起来您尝试编码的条件是:
(@BrandFilter = '' OR
@BrandFilter != '' AND mt.MarkaId IN (SELECT bf.Data FROM dbo.Split(@BrandFilter, ',')))