2017-05-09 6 views
0

"SQL Server Reporting Services 2012"에서 "Microsoft SQL Server 보고서 작성기 3.0"을 사용하고 있습니다. 주 보고서의 main.rdl에서 보고서 작성기 3.0을 사용하여 SQL 쿼리의 열 이름을 매개 변수로 전달하는 방법

나는 클릭하고 드릴 스루 조치 main.rdl 보고서는 테이블이

detail.rdl 드릴 스루 보고서 및이 테이블의 각 텍스트 상자입니다 호출하고있다. 사용자가 텍스트 상자를 클릭하면 detail.rdl 보고서가 호출됩니다. detail.rdl 보고서로 전달되는 하나의 매개 변수는 SQL의 열 이름으로 사용됩니다. 이 SQL은 detail.rdl 보고서에 필요한 데이터를 가져옵니다.

매개 변수를 사용하여 작성된 detail.rdl 보고서에 대해 SQL 쿼리를 실행하면 오류가 표시되지 않지만 데이터를 가져 오지는 않습니다. 필자는 매개 변수가 Text라는 데이터 유형을 가지고 있기 때문에 SQL에서 데이터를 가져 오지 않도록하는 따옴표로 바뀌 었다고 생각합니다.

따옴표없이 매개 변수 값으로 열 이름을 바꾼 후 동일한 SQL을 DB에서 직접 실행하면 데이터를 가져옵니다.

여기서 누락 된 열 이름으로 사용될 매개 변수를 전달하는 특정 방법이 있습니까? 내가 보고서 빌더에서 노력하고

SQL :

SELECT 
    table_name.column1 
    ,table_name.column21 
    ,table_name.column15 
    ,table_name.column6 
    ,table_name.column9 
    ,table_name.column2 
    ,table_name.column19 
    ,@column --the value in this variable is an existing column name from table table_name 
FROM 
    table_name 
WHERE 
    table_name.column1 LIKE @company 
    AND table_name.column21 LIKE @platform 
    AND (@column is null OR @column = '' OR @column = 'N/A' OR @column = 'Unknown');--I want to use same variable here as well 

UPDATE : 나는 줄 뒤에

DECLARE @company varchar(10) 
SET @company = ''company_name'' 
DECLARE @platform varchar(10) 
SET @platform = ''platform_name'' 

을 추가하여 작업 SQL을 얻을 수 있었다

SET @SQL = 
' 

불행히도 "Microsoft SQL Server 보고서 작성기 3.0 "은 값이 정의되어 있어도 변수 @SQL의 값을 묻는 메시지이므로이 SQL을 실행할 수 없습니다. 나는 선언하고 같은 라인에 @SQL의 값을 설정하려고 않았다

DECLARE @SQL varchar(5000) = 'DECLARE @company varchar(10) 

그러나 보고서 빌더는 여전히

+0

문제는 내 잘못 실행됩니다. 매개 변수 이름은 대소 문자를 구별하므로 모든 곳에서 '@SQL'을 읽도록하고, 마지막 구문은 '@sql'으로 표시합니다. SSRS에서 디자이너에 '@sql'매개 변수도 추가 할 수 있습니다.이 경우 안전하게 제거 할 수 있습니다. . –

답변

1

:-(실행되지 않습니다 @SQL 및 보고서의 값을 요청 그것은 말할 어렵다 어떤 문제가 당신의 코드를 보지 않고 있지만 (나는 생각한다)처럼 당신은 당신이하려고하는 SQL에서 문자열을 바꿀 수 없습니다.

처럼 Management Studio에서 간단한 뭔가를 당신의 SQL을 테스트하려면
DECLARE @MyParm varchar(256) = 'myColumnName' 
SELECT *, @MyParm FROM myTable 

그러면 MyTable의 모든 열과 'myColumnName'의 문자열 값이 최종 열로 반환됩니다.

이 작업을 수행하려는 경우 동적 SQL을 사용하도록 SQL을 변경해야 할 수도 있습니다.

DECLARE @MyParm varchar(256) = 'myCOlumnName' 
DECLARE @SQL varchar(max) 

SET @SQL = 'SELECT *, ' + @MyParm + ' FROM myTable' 

EXEC (@SQL) 

완전히 잘못 되었으면 시도하려는 내용을 볼 수 있도록 샘플 코드를 게시하십시오.

편집 : 여기 샘플 코드에 따라 특정 답변입니다

DECLARE @Column sysname = 'Column999' 
DECLARE @SQL varchar(max) 

SET @SQL = 
'SELECT 
    table_name.column1 ,table_name.column21 ,table_name.column15 ,table_name.column6 
    ,table_name.column9 ,table_name.column2 ,table_name.column19 
    ,' + @column + 
    ' FROM table_name 
    WHERE table_name.company LIKE @company 
     AND table_name.platform LIKE @platform 
     AND (' + @column + ' is null OR ' + @column + ' = '''' OR ' + @column + ' = ''N/A'' OR ' + @column + ' = ''Unknown'')' 

-- uncomment below to check SQL statement is correct 
--print @sql 

-- exec the SQL statement 
exec (@sql) 

약자로, 이것은 다음과 같은 SQL

SELECT 
    table_name.column1 ,table_name.column21 ,table_name.column15 ,table_name.column6 
    ,table_name.column9 ,table_name.column2 ,table_name.column19 
    ,Column999 FROM table_name 
    WHERE table_name.company LIKE @company 
     AND table_name.platform LIKE @platform 
     AND (Column999 is null OR Column999 = '' OR Column999 = 'N/A' OR Column999 = 'Unknown') 
+0

가 답장을 보내 주셔서 감사합니다 여기에 내가 뭘하려고 오전이다. 'SELECT table_name.column1 , table_name.column21 , table_name.column15 , table_name.column6 , table_name.column9 , table_name.column2 , table_name.column19 , @ column -이 변수의 값은 table_name 테이블의 기존 열 이름입니다. FROM table_name WHERE table_name.company LIKE @ 회사 번호 AND table_name.platform LIKE @ 플랫폼 AND (@column이 null이거나 @column = ''OR @column = 'N/A'OR @column = 'Unknown') - 여기에도 같은 변수를 사용하고 싶습니다. ' – 300

+0

구체적인 예와 일치하도록 내 대답을 편집했습니다 –

+0

다시 불편을 끼쳐 드려 죄송 합니다만, @company 및 @ platform을 어떻게 선언하고 설정할 수 있습니까? 줄'DECLARE @Column sysname = 'Column999'' 다음에'DECLARE @company varchar (10) ='company_name''과'DECLARE @platform varchar (10) = 'platform_name''을 시도했지만 쿼리가 오류로 실패합니다. : 스칼라 변수 "@company"를 선언해야합니다. 별도의 줄에 선언하고 설정하려고 시도했지만 여전히 동일한 오류가 발생합니다. – 300