Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何修改MySQL查询以在ReportBuilder3.0中工作?_Mysql_Sql_Ssrs 2012_Reportbuilder3.0 - Fatal编程技术网

如何修改MySQL查询以在ReportBuilder3.0中工作?

如何修改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

我必须在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 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查询?如果是,您可以在左侧的“参数”选项卡中更改查询参数的值。我认为您不能在查询本身中设置参数。