【发布时间】:2017-05-22 17:05:35
【问题描述】:
我必须在 Report Builder 3.0 中编写将在 MySQL DB 上运行的 SQL 查询。我还将 3 个参数传递给此查询,其中一个参数将是列名。查询结构如下:
SELECT
column1
,column21
,column15
,column6
,column9
,column2
,column19
FROM
table_name
WHERE
column1 LIKE @var_1 --@var_1 is a string
AND column21 LIKE @var_2 --@var_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:
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;
但我的问题是:如何在 Report Builder 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;
但我不断收到错误:
执行查询时出错。
ERROR [42000] [MySQL][ODBC 5.3(w) Driver][mysqld-5.1.73]您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在 'PREPARE stmt FROM @SQL;
附近使用正确的语法执行语句;
第 3 行的 DEALLOCATE PREPARE stmt'(Microsoft SQL Server 报表生成器)
如何使用正确的语法编写此 SQL 以便它在报表生成器中工作?
【问题讨论】:
-
无论您使用什么工具来执行它,您都必须编写它以使其具有正确的 SQL 语法。第一条线索:你永远不会关闭 CONCAT 函数上的 ()。
-
感谢您指出这一点。我在未知之后添加了一个右括号。此外,我还添加了从 MySQL 工作台运行时按预期获取数据的工作 SQL。但是从报表生成器的查询设计器运行相同查询的问题是它没有提示
@var_1和@var_2,所以我必须更新查询,以便它提示所有三个变量。毕竟,从 Report Builder 尝试查询时仍然会给出相同的错误。 -
使用更新后的代码编辑您的答案。此外,您可能会尝试在准备之前查看 @SQL 包含的内容。尝试自行执行,看看是否收到更具体的错误消息。
-
我的问题中的第三个 SQL 是我通过 Report Builder 尝试的。它在“所以,我尝试过类似 SQL 的操作,它与工作查询在同一行上有所不同:”根据您的建议,尝试在不使用 prepare 的情况下执行 @SQL,并得到相同的错误,但对于“EXECUTE @SQL”。错误是
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 'EXECUTE @SQL' at line 3 (Microsoft SQL Server Report Builder)试过SELECT @SQL但同样的错误。 -
我不是说要执行@SQL,而是要显示它,这样您就可以看到您准备和执行的语句中的语法错误在哪里。看不到 SQL 语句时很难调试它。
标签: mysql sql ssrs-2012 reportbuilder3.0