2017-05-22 5 views
0

MySQL DB에서 실행될 Report Builder 3.0에서 SQL 쿼리를 작성해야합니다. 또한이 쿼리에 3 개의 매개 변수를 전달하며 이러한 매개 변수 중 하나는 열 이름이됩니다. 이 같은 쿼리 구조 : 나는 쿼리 디자이너에서이 쓸 수있는 방법 :보고서 작성기 3.0에서 작동하도록 MySQL 쿼리를 수정하려면 어떻게합니까?

SET @var_1 = 'string1'; 
SET @var_2 = 'string2'; 
SET @columnName = 'string3'; 

SET @sql = CONCAT('SELECT 
    column1 
    ,column21 
    ,column15 
    ,column6 
    ,column9 
    ,column2 
    ,column19 
FROM 
    table_name 
WHERE 
    column1 LIKE @var_1 
    AND column21 LIKE @var_2 
    AND (', @columnName ,' is null OR ', @columnName ,' = \'\' OR ', @columnName ,' = \'N/A\' OR ', @columnName ,' = \'Unknown\')'); 

PREPARE stmt FROM @sql; 
EXECUTE stmt; 
DEALLOCATE PREPARE stmt; 

하지만 내 질문은 :

SELECT 
    column1 
    ,column21 
    ,column15 
    ,column6 
    ,column9 
    ,column2 
    ,column19 
FROM 
    table_name 
WHERE 
    column1 LIKE @var_1 [email protected]_1 is a string 
    AND column21 LIKE @var_2 [email protected]_1 is a string 
    AND (@column is null OR @column = '' OR @column = 'N/A' OR @column = 'Unknown');--value in @column is an existing column name from table table_name 

나는 내가 원하는 것을와 MySQL 워크 벤치에서 작동하는 SQL을 보고서 작성기 3.0의? 나는 보고서 작성기에서 다음과 같은 SQL과 같은 무언가를 시도하며 작업 쿼리와 같은 라인에 변화를이다 :

SET @SQL = CONCAT('SELECT 
    column1 
    ,column21 
    ,column15 
    ,column6 
    ,column9 
    ,column2 
    ,column19 
FROM 
    table_name 
WHERE 
    column1 LIKE ''%' + @var_1 + '%'' 
    AND column21 LIKE ''%' + @var_2 + '%'' 
    AND (', @column ,' is null OR ', @column ,' = \'\' OR ', @column ,' = \'N/A\' OR ', @column ,' = \'Unknown\')'); 

PREPARE stmt FROM @SQL; 
EXECUTE stmt; 
DEALLOCATE PREPARE stmt; 

하지만 점점 오류가 계속 : 나는 올바른으로이 SQL을 쓸 수있는 방법

An error occurred while executing the query.

ERROR [42000] [MySQL][ODBC 5.3(w) Driver][mysqld-5.1.73]You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'PREPARE stmt FROM @SQL;

EXECUTE stmt;

DEALLOCATE PREPARE stmt' at line 3 (Microsoft SQL Server Report Builder)

을 구문을 사용하여 보고서 작성기에서 작동합니까?

+0

당신이 그것을 실행하는 데 사용하는 도구에 관계없이 올바른 SQL 구문이되도록 작성해야합니다. 첫 번째 단서 : CONCAT 함수에서()를 닫지 마십시오. –

+0

감사합니다. 알 수없는 뒤에 닫는 괄호를 추가했습니다. 또한 MySQL 작업대에서 실행할 때 예상대로 데이터를 가져 오는 작업 SQL을 추가했습니다. 그러나 보고서 작성기의 쿼리 디자이너에서 같은 쿼리를 실행하면 '@ var_1' 및'@ var_2 '에 대한 프롬프트가 표시되지 않으므로 쿼리를 업데이트하여 세 가지 변수에 대한 프롬프트를 표시해야합니다. 이 모든 후 보고서 작성기에서 시도 할 때 쿼리가 여전히 동일한 오류를 제공합니다. – 300

+0

업데이트 된 코드로 __ 귀하의 답변 __을 (를) 편집하십시오. 또한 준비하기 전에 @SQL에 포함 된 내용을 확인하려고 할 수도 있습니다. 보다 구체적인 오류 메시지가 있는지 보려면 자체적으로 실행 해보십시오. –

답변

0

보고서 작성기의 쿼리 디자이너에서 쿼리를 준비하고 실행해야한다고 생각하지 않습니다. 데이터 소스에 지정한 데이터베이스 유형에 따라 쿼리를 작성하면 Report Builder가 실행을 처리합니다.

그러니 그냥 쿼리 디자이너에서 이것을 입력 :

SELECT 
    column1 
    ,column21 
    ,column15 
    ,column6 
    ,column9 
    ,column2 
    ,column19 
FROM 
    table_name 
WHERE 
    column1 LIKE ''%' + @var_1 + '%'' 
    AND column21 LIKE ''%' + @var_2 + '%'' 
    AND (', @column ,' is null OR ', @column ,' = \'\' OR ', @column ,' = \'N/A\' OR ', @column ,' = \'Unknown\')' 

를 또는 쿼리 텍스트 상자의 아래쪽에있는 "쿼리 디자이너"버튼을 클릭하여 쿼리를 작성 시도? 이렇게하면 SQL 쿼리를 입력하지 않고 명명 또는 구문 오류가 발생할 위험없이 데이터를 가져올 테이블을 지정할 수 있습니다.

+0

제안 해 주셔서 감사합니다. 내가 CONCAT, PREPARE 및 EXECUTE 제거한 후 쿼리를 실행 해 보았지만 구문 오류가 발생했습니다. 이유는 이스케이프 문자 및 CONCAT에 대한 다른 구문이었습니다. 그래서 모든 추가 구문을 제거하고 간단한 쿼리를 실행했지만 레코드를 가져 오지 않습니다. MySQL 데이터베이스에서 3 개의 변수를 값으로 대체하여 동일한 쿼리를 직접 실행하면 레코드를 가져옵니다.차이점은 세 번째 변수 @column이 열 이름이기 때문입니다. 보고서 작성기가이를 대체하면 문자열을 고려하여 따옴표가 배치됩니다. 열 이름입니다. – 300

+0

그게 내가 매개 변수 중 하나가 실제로 열 이름 이었기 때문에 동적 쿼리를 사용하려고했던 이유였습니다. 어떻게 든 보고서 작성기가'PREPARE ... EXECUTE .... DEALLOCATE' 또는 단지'EXECUTE'와 잘 작동하지 않는다고 생각합니다. 보고서 작성기에서 어떻게 쿼리를 변경하더라도 SET @SQL = CONCAT ('.... @ column,'= \ 'Unknown \') ') 다음에 첫 줄에 항상 오류가 발생하기 때문에 이것을 추측하고 있습니다. ' – 300

+1

데이터 집합의 SQL 쿼리를 편집 하시겠습니까? 그렇다면 왼쪽의 '매개 변수'탭에서 검색어 매개 변수의 값을 변경할 수 있습니다. 난 당신이 쿼리 자체에 매개 변수를 설정할 수 있다고 생각하지 않습니다. –