如何修改MySQL查询以在ReportBuilder3.0中工作?
我必须在ReportBuilder3.0中编写一个在MySQL数据库上运行的SQL查询。我还向这个查询传递了3个参数,其中一个参数是列名。查询结构如下所示:如何修改MySQL查询以在ReportBuilder3.0中工作?,mysql,sql,ssrs-2012,reportbuilder3.0,Mysql,Sql,Ssrs 2012,Reportbuilder3.0,我必须在ReportBuilder3.0中编写一个在MySQL数据库上运行的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 LIK
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
我有一个SQL,它可以实现我想要的功能,并且可以从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;
但我的问题是:如何在报表生成器3.0的查询设计器中编写?
我在Report Builder中尝试了类似以下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;
但我不断地犯错误:
执行查询时出错
错误[42000][MySQL][ODBC 5.3(w)驱动程序][mysqld-5.1.73]您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,了解使用near“PREPARE stmt FROM@SQL
执行stmt
在第3行取消分配“准备stmt”(Microsoft SQL Server报表生成器)
如何使用正确的语法编写此SQL,使其在报表生成器中工作?我认为您不需要在报表生成器的查询设计器中准备和执行查询。根据您在数据源中指定的数据库类型,您只需编写查询,报表生成器将处理执行 因此,只需在查询设计器中输入以下内容:
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查询并冒命名或语法错误的风险 无论您使用什么工具来执行它,都必须编写它以使其具有正确的SQL语法。第一条线索:您从未关闭CONCAT函数的()函数。谢谢您指出这一点。我在Unknown后面加了一个右括号。此外,我还添加了在从MySQL工作台运行时按预期获取数据的工作SQL。但从报表生成器的查询设计器运行同一个查询时遇到的问题是,它不会提示输入
@var_1
和@var_2
,因此我必须更新查询,以便它会提示输入所有三个变量。在所有这些之后,从报表生成器尝试查询时仍然会出现相同的错误。请使用更新的代码编辑您的答案。另外,在准备之前,您可能会尝试查看@SQL包含哪些内容。试着自己执行,看看是否会得到更具体的错误消息。我的问题中的第三个SQL是我通过报表生成器尝试的。它在第行“所以,我尝试了类似以下SQL的操作,它的变体与工作查询在同一行:“根据您的建议,尝试在不使用prepare的情况下执行@SQL,但得到的错误与“execute@SQL”相同。错误是error[42000][MySQL][ODBC 5.3(w)Driver][mysqld-5.1.73]您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,了解第3行(Microsoft SQL server Report Builder)中“EXECUTE@SQL”附近使用的正确语法。
尝试了选择@SQL
,但出现了相同的错误。我不是说要执行@SQL,但是要显示它,以便您可以看到您准备和执行的语句中语法错误的位置。当您看不到SQL语句时,很难调试它。谢谢您的建议。我尝试在删除CONCAT、PREPARE和EXECUTE之后只运行查询,但随后它给出了语法错误。原因是CONCAT中的转义字符和其他语法。因此,我删除了所有额外的语法并运行了这个简单的查询,但它不会提取任何记录。如果我直接在MySQL数据库上运行相同的查询,将3个变量替换为它们的值,那么它会获取记录。行为上的差异是因为第三个变量@column是一个列名。当报表生成器替换它时,它会在其周围加引号,将其视为字符串。这就是我之所以尝试使用动态查询的原因,因为其中一个参数实际上是一个列名。我认为报表生成器在某种程度上与PREPARE…EXECUTE…DEALLOCATE
或只是EXECUTE
配合不好。我猜这是因为无论我如何更改报表生成器中的查询,它总是在SET@SQL=CONCAT(“....@column,”=\'Unknown\”)之后的第一行给出错误代码>是否正在尝试编辑数据集的sql查询?如果是,您可以在左侧的“参数”选项卡中更改查询参数的值。我认为您不能在查询本身中设置参数。