2009-06-29 4 views
1

보고 서비스에서 다중 값 선택과 관련된 다른 질문을 살펴본 결과 아무도 내 문제를 해결하지 않았습니다.
내 문제는 이것입니다. 매개 변수 - @Type에 대한 쿼리가있는 보고서가 있습니다.
보고서 paramenter가 설정 유형다중 값 및 저장 프로 시저

에 의해 TypeTable 순서에서 를 구분 (유형)을 선택하고 보고서는 선택 상자에서 (현재 3) 모든 반환 된 결과를 보여줍니다.

내 스토어드 프로 시저에는 다음 절이 있습니다. 여기서 유형 (@ 유형). 보고서는 세 가지 모두가 아니라 선택 상자의 첫 번째 항목 만 반환합니다.

도와주세요.

감사합니다.

답변

0

IN (@ 유형) 문을 사용하는 것이 불가능하다고 생각합니다.

IN은 쉼표로 구분해야하며 @Type을 "1,2,3"으로 전달하고 작동시킬 수 있다고 생각하지 않습니다.

아마 @Type 변수를 임시 테이블로 구문 분석 한 다음 임시 테이블에서 JOIN을 수행 할 수 있습니다. 그래도 조금 느릴 수도 있습니다.

1

나는 다중 선택 목록 상자에 의해 반환되는 형식 또는 데이터 유형을 잘 모르겠지만,이 같은 경우 :

X,Y,Z 

당신은 (내가 옵션 1을 선호하는) 두 가지 옵션이 있습니다 :

옵션 1
당신은 떨어져 Arrays and Lists in SQL Server 2005- Using a Table of Numbers를 사용하여 분할 할 수 있습니다. 이 코드를 사용하면 문자열을 각 행의 값과 함께 테이블로 나눌 수 있습니다. 그런 다음 해당 테이블을 INNER JOIN으로 쿼리에 추가하고 여러 @Type 값을 기반으로 필터링 할 수 있습니다.

저장 프로 시저 내에서 옵션 2
당신은 문자열로 동적 쿼리를 구축 할 수 있습니다. 그런 다음 EXECUTE (@ YourString)하고 해당 쿼리를 실행할 수 있습니다. 귀하의 문자열과 같이 보일 것이다 :

SET @ 쿼리를 = 'SELECT ... FROM ... WHERE ...시 ('+ ISNULL (@type, '') + ')'

봐 이 링크 The Curse and Blessings of Dynamic SQL

0

다음 테이블 변경 기능을 사용하여 목록을 IN'd에서 JOIN 될 수있는 테이블로 분할했습니다.

ALTER FUNCTION [dbo].[Split] (@List nvarchar(4000), @SplitOn nvarchar(5)) RETURNS @RtnValue table (
      Id int identity(1,1), Value nvarchar(100)) AS BEGIN WHILE (Charindex(@SplitOn,@List)>0)   BEGIN   Insert Into @RtnValue (value)   Select Value = ltrim(rtrim(Substring(@List,1,Charindex(@SplitOn,@List)-1)))    Set @List = Substring(@List,Charindex(@SplitOn,@List)+len(@SplitOn),len(@List))   END  Insert Into @RtnValue (Value) Select Value = ltrim(rtrim(@List)) 

    Return END