针对ODBC数据源在MS Reporting Services(SQL Server 2008)中使用参数
时间:2020-03-05 18:39:16 来源:igfitidea点击:
我在Visual Studio中编写一个报告,该报告采用用户输入参数并针对ODBC数据源运行。我想手动编写查询,并让报表服务在将其发送到数据库之前用参数值替换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表达式中使用换行符。如果这样做,我们将得到一个错误。
如果我们需要其他帮助,Holla会回来。
回答
ODBC是否不使用旧的"?"参数语法?试试这个:
select col1, col2 from table1 where col3 = ?
这样,参数的顺序就变得很重要,但是与简单地添加参数值相比,它不容易受到SQL注入的攻击。
回答
我对此问题有些困惑,如果我们正在寻找简单的参数用法,则表示法是:* paramName *
,但是,如果我们想在结构上更改WHERE
子句(就像我们在sql +中使用?那样),则我们实际上应该在报告中使用自定义代码来定义一个函数,该函数返回查询所需的sql。
不幸的是,当使用自定义代码时,不能直接在生成的查询中引用参数,而必须在那里将值连接到结果字符串中,从而引入了SQL注入的可能性。