2013-07-15 3 views
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에이 오류가 표시됩니다.

하위 쿼리가 두 개 이상의 값을 반환했습니다. 하위 쿼리가 =,! =, <, < =,>,> = 또는 하위 쿼리가 식으로 사용될 때 하위 쿼리가 수행되는 경우에는 허용되지 않습니다.

내 분할 기능은 여러 테이블을 반환하지만 나는 IN를 작성하지 =

감사

+3

내가 CASE는 테이블 값을 반환 할 수 있다고 생각하지 않습니다, 스칼라 –

+0

당신은 말로 설명 할 수 * 정확히 * 당신이 때 발생하는 것이 '@BrandFilter = '''? –

답변

6

CASE WHEN @BrandFilter != '' THEN 절은 하나의 스칼라 값을 기대하지만 여러 행을 반환 할 수있는 UDF를 호출한다.

+0

단일 스칼라 값을 기대하는 이유 I "AND mt.MarkaId IN" –

+0

분할 함수에서 값 테이블을 가져 왔지만 스칼라 값 *을 기대하는 CASE 식을 통해 전달합니다. 이것이'IN' 표현식으로 둘러싸여 있다는 사실은 부적합합니다. –

2

그런 식으로는 CASE을 사용할 수 없습니다. 당신이 코드에 노력하고 조건이이처럼 보이는 :

(@BrandFilter = '' OR 
@BrandFilter != '' AND mt.MarkaId IN (SELECT bf.Data FROM dbo.Split(@BrandFilter, ',')))