针对 ODBC 数据源使用 MS Reporting Services (SQL Server 2008) 中的参数
-
08-06-2019 - |
题
我在 Visual Studio 中编写一个报告,该报告采用用户输入参数并针对 ODBC 数据源运行。我想手动编写查询,并让报告服务在将其发送到数据库之前将部分 where 子句替换为参数值。似乎正在发生的事情是 @parmName
我假设 will be Replaced 实际上是作为 SQL 语句的一部分发送的。我是否在某处缺少配置设置,或者这根本不可能?
我没有使用该工具中的筛选选项,因为这似乎会从数据库中带回完整数据集并在 SQL Server 上进行筛选。
解决方案
听起来您需要将 SQL 语句视为表达式。例如:
="Select col1, col2 from table 1 Where col3 = " & Parameters!Param1.Value
如果 where 子句是字符串,则需要执行以下操作:
="Select col1, col2 from table 1 Where col3 = '" & Parameters!Param1.Value & "'"
重要的:不要在 SQL 表达式中使用换行符。如果你这样做,你会得到一个错误。
如果您需要更多帮助,请回来。
其他提示
ODBC不使用旧的“?”参数的语法?尝试这个:
select col1, col2 from table1 where col3 = ?
那么参数的顺序就变得很重要,但与简单地附加参数值相比,它更不容易受到 SQL 注入的影响。
尝试通过 ODBC 查询 Access 数据库时遇到同样的问题。
我原来的查询: SELECT A.1 FROM A WHERE A.1 = @parameter
导致错误。修改为: SELECT A.1 FROM A WHERE A.1 = ?
.
然后,您必须将查询参数与报告参数进行映射。
我对这个问题有点困惑,如果您正在寻找简单的参数用法,那么符号是:*paramName*
,但是如果你想从结构上改变 WHERE
子句(就像您在 sql+ 中使用 ? 一样),那么您实际上应该在报告中使用自定义代码来定义一个返回查询所需 sql 的函数。
不幸的是,当使用自定义代码时,参数不能直接在生成的查询中引用,而必须将其中的值连接到结果字符串中,从而引入潜在的 SQL
注射。