【问题标题】:Pass SSRS parameter to SQL query将 SSRS 参数传递给 SQL 查询
【发布时间】:2013-08-02 22:03:28
【问题描述】:

我已经构建了一个 SSRS 报告,该报告应该查看来自多个具有相似名称的表之一的数据 - 即 table001、table010、table011 等。在构建报告时,我只包括了三个十多张桌子。一切正常,直到我将所有其余表添加到查询中,同时使用多个 SELECT 语句 UNIONed;它试图对如此多的数据进行分类,以至于需要将近半个小时来呈现报告。那是行不通的。

有没有办法将 SSRS 参数传递给 SQL 查询,指定要访问的表?

【问题讨论】:

  • 如果查询慢,报告就会慢。问题不在于将参数从 SSRS 传递到数据库,而在于您的查询。您需要了解如何解决将 12 个表合并在一起的问题,您的报告问题将自行解决
  • @Tom - 这就是为什么我试图弄清楚如何使用该变量作为表名。如果我能做到这一点,我可以只查询一个表而不是所有表 - 只需将报告参数传递给变量,它就会根据它进行查询。我只是不知道该怎么做。
  • 对不起,我现在明白了,我没有先理解这个问题。那么,基于某些参数,您将从某个表中进行选择吗?例如,@Param = 'Something' 然后从 table008 中选择?您可以在查询中的 if/elsecase 语句中定义它。
  • @Tom - 是的,类似的。如果你能扩展一点,那就太好了。我对 SQL 还是很陌生。很可能会有一个参数,其值为字符串'001'。我尝试过像FROM @Param 这样的事情,但后来它抱怨静态变量。

标签: sql tsql reporting-services bids ssrs-2008-r2


【解决方案1】:

根据您的 cmets,您可以执行以下操作

DECLARE @Parameter NVARCHAR(15) = 'Foo'

SELECT CASE 
WHEN @Parameter IN ('Foo', 'Bar')
    THEN (
            SELECT *
            FROM table001
         ) 
WHEN @Parameter IN ('Foobar')
    THEN (
            SELECT *
            FROM table002
         ) 
ELSE
         (
            SELECT *
            FROM table003
         )
END


交替

SELECT CASE @Parameter 
WHEN 'Foo'
    THEN (
            SELECT *
            FROM table001
         ) 
WHEN 'Bar'
    THEN (
            SELECT *
            FROM table002
         ) 
WHEN 'Foobar'
    THEN (
            SELECT *
            FROM table003
         ) 
ELSE
    (
        SELECT *
        FROM @table004
    )
END

【讨论】:

  • 在第一个示例中,我看不到报告参数的值是如何到达查询的。看起来您只是在声明一个 SQL 变量并立即为其赋值。
  • 另外,我尝试了第二个示例。它给了我三个错误 - Must declare the scalar variable @ParamIncorrect syntax near the keyword ELSEIncorrect syntax near the keyword SET
  • 嗯,对,那是为了演示。也许我不明白这个问题——你的整个问题仅仅是如何在 SSRS 中传递参数?我猜这就是标题所说的。在这种情况下,msdn.microsoft.com/en-us/library/aa337432(v=sql.105).aspx 是关于该主题的深入文章。
  • 我已经尝试过那篇文章所说的,用几种不同的方式,但无济于事。我刚才又试了一次,它仍然给我Must declare the scalar variable 错误。
【解决方案2】:

您是否按照 MSDN 教程进行操作?这也不错:http://sql-bi-dev.blogspot.com/2010/07/report-parameters-in-ssrs-2008.html

请分享您尝试过的方法以及遇到问题的地方。本质上,您在报告中定义一个参数并将其包含在您的查询中。 SSRS 提供参数值(或通过用户输入接收),然后将最终查询传递给数据库。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-25
    • 1970-01-01
    • 1970-01-01
    • 2014-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多