2016-10-03 3 views
1

동적 매개 변수로 수정 ​​보고서를 복제하려고합니다.동적으로 WHERE 조건 추가

enter image description here

결과 쿼리는 다음과 같이 보이지만 목록에 추가 OR @param 조항으로 성장할 수 : I 매개 변수 화면에 문자열을 입력하고 화살표 버튼을 클릭하면 목록에 매개 변수를 추가

몇 가지 매개 변수를 포함하도록 SSRS에있는 목록을 어떻게 만들 수 있습니까? 아래의 쿼리는 하나의 가능한 예입니다

SELECT * FROM table_name WHERE 
    @param LIKE 'cfe%' 
OR @param LIKE 'abr%' 
OR @param LIKE 'fez%' 
OR @param LIKE 'zez%' 

나는 매개 변수에 여러 값을 사용했지만, 곧 내가 할 나는 매개 변수 상자에 입력 할 수 없습니다 :

enter image description here

I을 시도했습니다 this하지만 작동하지 않았다. 나는 또한 CONTAINS을 사용하려고했지만보기에는 색인이 없습니다.

+0

안녕하세요 4444 @ 감사하지만 대답은 ... 항상 –

+3

안녕 앤디 더 :

그래서 저장 프로 시저에서 당신은 다음과 같은 문장을 사용합니다. 나는 당신의 질문에 대한 답을 모른다. 나는 그것을 향상시킬 수있는 사람들을 끌어들일 수있는 최선의 방법으로 그것을 개선하고 형식을 정했다. – 4444

+1

깨진 링크가있는 질문은 많은 답변을 얻지 못합니다. "내 질문을 편집 해 주셔서 감사합니다." – dazedandconfused

답변

2

단일 매개 변수 문자열을 사용할 수 있습니다. 사용자는 목록의 항목을 쉼표로 구분합니다. 쿼리가 훨씬 더 나 빠졌지 만 쉼표로 구분 된 접두사의 변수 번호의 예가 있습니다.

이 정보가 도움이되기를 바랍니다. 단순하지도 않고 예쁘지도 않습니다. 데이터 세트에서

Parameter Test

, 그래서 같은 매개 변수를 사용하여 유사한 쿼리 또는 PROC를 사용하고 작동합니다 :

Declare @prefixes varchar(1000) 

set @prefixes='abc,defg,efgh,hij,jkl,mno' 

declare @sql nvarchar(max) = '' 

declare @currentint int 

set @currentint = 1 

declare @maxint int 

set @maxint = len(@prefixes) - len(replace(@prefixes, ',', '')) + 1 

declare @currentcommaposition int 


set @sql = 'IF OBJECT_ID(''tempdb..#tempTest'') IS NOT NULL DROP TABLE #tempTest 
create table #tempTest 
(
ID INT, 
name varchar(100) 
) 

insert into #tempTest 
(id,name) 
select 1,''abcd'' 
union 
select 2, ''defghijk'' 
union 
select 3,''efghoot'' 
union 
select 4,''hijack'' 
union 
select 5,''jklmo'' 
union 
select 6,''mnopoly'' 
union 
select 7,''pqrstuv'' 
union 
select 8,''tubool'' 
IF OBJECT_ID(''tempdb..#testresults'') IS NOT NULL DROP TABLE #testresults 
create table #testresults 
(
id int, name varchar(100) 
) 
declare @prefixes varchar(100) = ''' + @prefixes + ',''' + char(10) + ' declare @currentint int declare @maxint int = ' + convert(varchar(10),@maxint) + char(10) 

while (@currentint <= @maxint) 
begin 

set @sql = @sql + 'set @currentint = ' + convert(varchar(10),@currentint) + ' declare @suffix' + convert(varchar(2), @currentint) + ' VARCHAR(100)' + char(10) 
+ 'set @suffix' + convert(varchar(2), @currentint) + '= substring(@prefixes,0,charindex('','',@prefixes))' + char(10) 
+ 
'set @prefixes=Right(@prefixes,len(@prefixes)-charindex('','',@prefixes))' + char(10) + 
'insert into #testresults (id, name) 
select id, name from #temptest t where t.name like @suffix' + convert(varchar(2), @currentint) + ' + ''%''' + char(10) 
+ 'if (@currentint = @maxint) begin select * from #testresults end ' + char(10) 

set @currentint = @currentint + 1 

end 

exec sp_executesql @sql 
+0

안녕하세요 @ Alwaysariyana, 만약 내가 접미사하지만 전체 문자열을보고 아니 었 작동하지 것입니다. 보시다시피, 나는''좋아하는 abr % ''또는 필요한 접미어를 많이 사용하고 있습니다. –

+0

접두어의 최대 개수가 정의 되었습니까, 아니면 항상 가변적입니까? – JesalynOlson

+0

안녕하세요 @Alwaysariyana, 항상 변수 –

1

각 접미사 A에 대한 매개 변수를 낳게 될 것입니다에 대한 두 번째 옵션 사용자는 대답하여 기본값으로 공백이나 null을 허용 할 수 있습니다. 이것은 사용자가 입력 할 수있는 접두어의 수를 제한 할 것이지만 사용자가 입력 할 수있는 최대 수를 추측 할 수 있어야한다고 생각합니다. 또는 사용자가 여러 번 보고서를 실행할 수 있으며 보고서를 내보낼 때 Excel에서 내보내기를 수행하여 원할 경우 보고서를 서로 매쉬 할 수 있습니다.

개발자에게는 좀 더 이해하기 쉽지만 사용자에게는 더 많은 작업이 필요합니다. 내 편집 질문에 대한

select * 
from dbo.Test t 
WHERE 
(ISNULL(@Prefix1,'') <> '' AND t.TestName LIKE @Prefix1 + '%') 
OR 
(ISNULL(@Prefix2,'') <> '' AND t.TestName LIKE @Prefix2 + '%') 
OR 
(ISNULL(@Prefix3,'') <> '' AND t.TestName LIKE @Prefix3 + '%') 
OR 
(ISNULL(@Prefix4,'') <> '' AND t.TestName LIKE @Prefix4 + '%') 
OR 
(ISNULL(@Prefix5,'') <> '' AND t.TestName LIKE @Prefix5 + '%') 
OR 
(ISNULL(@Prefix6,'') <> '' AND t.TestName LIKE @Prefix6 + '%') 
OR 
(ISNULL(@Prefix7,'') <> '' AND t.TestName LIKE @Prefix7 + '%') 
OR 
(ISNULL(@Prefix8,'') <> '' AND t.TestName LIKE @Prefix8 + '%') 
OR 
(ISNULL(@Prefix9,'') <> '' AND t.TestName LIKE @Prefix9 + '%') 
OR 
(ISNULL(@Prefix10,'') <> '' AND t.TestName LIKE @Prefix10 + '%')