我在 Visual Studio 中编写了一个报告,该报告采用用户输入参数并针对 ODBC 数据源运行。我想手动编写查询,并让报告服务在将 where 子句发送到数据库之前用参数值替换部分 where 子句。似乎正在发生的事情是,@parmName
我假设将被替换的实际上是作为 SQL 语句的一部分发送的。我是否在某处缺少配置设置,或者这根本不可能?
我没有在工具中使用过滤器选项,因为这似乎会从数据库中带回完整的数据集并在 SQL Server 上进行过滤。
我在 Visual Studio 中编写了一个报告,该报告采用用户输入参数并针对 ODBC 数据源运行。我想手动编写查询,并让报告服务在将 where 子句发送到数据库之前用参数值替换部分 where 子句。似乎正在发生的事情是,@parmName
我假设将被替换的实际上是作为 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 查询访问数据库时遇到了同样的问题。
我原来的查询:SELECT A.1 FROM A WHERE A.1 = @parameter
导致错误。改为:SELECT A.1 FROM A WHERE A.1 = ?
。
然后,您必须将查询参数与您的报告参数进行映射。
我对这个问题有点困惑,如果您正在寻找简单的参数用法,那么符号是 : *paramName*
,但是如果您想在结构上更改WHERE
子句(就像您可能在 sql+ 中使用?)那么您真的应该在其中使用自定义代码报表来定义一个函数,该函数返回查询所需的 sql。
不幸的是,在使用自定义代码时,不能在生成的查询中直接引用参数,而必须将这些值连接到结果字符串中,从而引入了SQL
注入的可能性。