1

你能告诉我为什么会出现这个错误吗?

我认为没有使用任何类型的表达式“=”?

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 个值。当子查询跟随 =、!=、<、<=、>、>= 或子查询用作表达式时,这是不允许的。

我的拆分函数返回多行表,但我IN没有写=

谢谢

4

2 回答 2

6

CASE WHEN @BrandFilter != '' THEN子句需要一个标量值,但您调用的 UDF 可能会返回多行。

于 2013-07-15T15:26:04.640 回答
2

你不能用CASE那种方式。看起来您尝试编码的条件是这样的:

(@BrandFilter = '' OR 
@BrandFilter != '' AND mt.MarkaId IN (SELECT bf.Data FROM dbo.Split(@BrandFilter, ',')))
于 2013-07-15T15:30:35.490 回答