【问题标题】:Using Parameters in MS Reporting Services (SQL Server 2008) against an ODBC data source针对 ODBC 数据源使用 MS Reporting Services (SQL Server 2008) 中的参数
【发布时间】:2010-09-05 18:35:10
【问题描述】:

我在 Visual Studio 中编写了一个报告,该报告采用用户输入参数并针对 ODBC 数据源运行。我想手动编写查询,并让报告服务在将 where 子句发送到数据库之前用参数值替换部分 where 子句。似乎正在发生的事情是 @parmName 我假设将被替换实际上是作为 SQL 语句的一部分发送的。我是否在某处遗漏了配置设置,或者这根本不可能?

我没有使用工具中的筛选选项,因为这似乎会从数据库中恢复完整的数据集并在 SQL Server 上进行筛选。

【问题讨论】:

    标签: sql-server visual-studio sql-server-2008 reporting-services odbc


    【解决方案1】:

    听起来您需要将 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 表达式中使用换行符。如果你这样做,你会得到一个错误。

    如果您需要更多帮助,欢迎回来。

    【讨论】:

      【解决方案2】:

      ODBC 不使用旧的“?”参数的语法?试试这个:

      select col1, col2 from table1 where col3 = ?
      

      此时参数的顺序变得很重要,但它比简单地附加参数值更不容易受到 SQL 注入的影响。

      【讨论】:

        【解决方案3】:

        我对这个问题有点困惑,如果您正在寻找简单的参数用法,那么符号是 :*paramName* ,但是如果您想在结构上更改 WHERE 子句(就像您可能在 sql+ 中使用?)那么您真的应该在报告中使用自定义代码来定义一个返回查询所需 sql 的函数。

        不幸的是,在使用自定义代码时,无法在生成的查询中直接引用参数,而必须将这些值连接到结果字符串中,从而引入SQL 注入的可能性。

        【讨论】:

          【解决方案4】:

          尝试通过 ODBC 查询访问数据库时遇到了同样的问题。

          我的原始查询:SELECT A.1 FROM A WHERE A.1 = @parameter 导致错误。更改为:SELECT A.1 FROM A WHERE A.1 = ?

          然后您必须将查询参数与您的报告参数进行映射。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-07-29
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多