【问题标题】:Build an SSRS Dataset that Queries for Data Dependent on Results From a Stored Procedure That Creates a Temp Table to Store Results?构建一个 SSRS 数据集来查询依赖于来自存储过程的结果的数据,该存储过程创建一个临时表来存储结果?
【发布时间】:2016-05-05 19:58:04
【问题描述】:

我需要构建一个显示来自 SQL Azure 表的查询结果的 SSRS 报告。但是,我的 where 条件之一将检查从存储过程 (exec team param1, param2) 结果集中提取的数据。更复杂的是,存储过程会创建一个临时表 (tempteam) 来存储结果。如何为我需要的数据编写查询,在 where 子句中指定 tempteam 内容?

示例代码

exec team 9596, 2

select * from tempteam

Tempteam 样本结果

        consid
        9596
        23456
        24354
        20965
        ....
        ....
        .... 

【问题讨论】:

    标签: sql-server stored-procedures reporting-services azure-sql-database ssrs-2012


    【解决方案1】:

    您不能只在查询的 WHERE 子句中使用“TEMP”表吗?

    SELECT * 
    FROM SOME_TABLE 
    WHERE ID IN (SELECT consid FROM tempteam)
    

    我不认为“TEMP”表实际上是一个普通的 SQL 临时表,因为它前面没有标签 (#tempteam) - 它看起来像是一个存储在数据库中的实际表。

    【讨论】:

    • 你是对的。这不是技术上的临时表。但是每次调用 proc 时,表中的数据都会发生变化。所以我需要以某种方式将 proc 合并到 SSRS 数据集中。
    • 我所做的是按照您所说的那样构建查询。因为此报告是供我使用的,所以我将手动运行存储过程以使用查询所需的数据填充表,以返回所需的数据。
    【解决方案2】:

    这是您可以使用的一种选择:

    EXEC('EXEC team 9596, 2; select * from tempteam')
    

    或参数化:

    EXEC('EXEC team ' + @p1 + ',' + @p2 + '; select * from tempteam')
    

    完整复制:

    create table test(f1 varchar(256) null)
    go
    create proc sp_test(@p varchar(256) = 'Hello ')
    as
        insert test
        select @p
        return 1
    go
    
    declare @p varchar(256) = 'World'
    
    EXEC('EXEC sp_test @p = ''Hello ''; select * from test')
    EXEC('EXEC sp_test @p = ' + @p + '; select * from test')
    
    drop proc sp_test
    go
    drop table test
    go
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-19
      • 1970-01-01
      相关资源
      最近更新 更多