查询SSRS报告的存储过程

时间:2014-05-28 20:19:49

标签: sql sql-server tsql stored-procedures reporting-services

我使用带参数的查询在SSRS中创建了一个报告,它运行正常。但我决定使用存储过程,以便在需要进行任何更改时,只需将其应用于SSMS,而不是SSMS和SSRS中的查询。

所以我创建了一个如下所示的存储过程:

USE [Some_Database]

GO

CREATE PROCEDURE MyReport 

AS

DECLARE @p_ServerName nvarchar(10) = 'all'
DECLARE @p_Env        nvarchar(10) = 'all'
DECLARE @p_EnvCat     nvarchar(10) = 'all'

SELECT DISTINCT <rest of my query...>

这是我正在使用的版本的缩短版本,但关键字的顺序是准确的。当我在SSRS中预览报告时,我得到了我的无行消息。

任何人都可以在创建存储过程时看到我做错了吗?

使用存储过程还需要在SSRS中使用不同于使用查询的参数吗?

干杯。

更新:在CREATE和AS之间放置参数并删除DECLARE后,它在SSRS中用于特定值,但是当我选择“ALL”时它不会。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

我唯一能想到的可能就是参数的位置。 如果从外部源传入params,例如从用户在报表服务中输入它们,那么它们需要在AS语句之前声明,如下所示:

USE [CRCIVR]
GO
Create Proc dbo.[spFrontTileExceptionsData]  
(
    @userid as int,
    @companyid as int,
    @exceptioncodes as varchar
)        
AS
Begin     

这是我能想到的,但却看不到其余的代码。它也可能是报告服务本身的内容。

答案 1 :(得分:1)

您希望让存储过程接受输入参数,以便SSRS将它们发送出去。如果proc中有DECLARE个参数,那么这些参数将被“隐藏”到SSRS。使用你的例子,它是这样的:

USE [Some_Database]

GO

CREATE PROCEDURE MyReport 
   @p_ServerName NVARCHAR(10) = 'all',
   @p_Env NVARCHAR(10) = 'all',
   @p_EnvCat NVARCHAR(10) = 'all'
AS

SELECT DISTINCT <rest of my query...>
相关问题