【问题标题】:Query to Stored Procedure for SSRS Report查询 SSRS 报告的存储过程
【发布时间】:2014-07-18 05:39:06
【问题描述】:

我使用带参数的查询在 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 中预览报告时,我会收到 No Rows 消息。

谁能看到我在创建存储过程时做错了什么?

与使用查询相比,使用存储过程是否需要在 SSRS 中设置不同的参数?

干杯。

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

有什么想法吗?

【问题讨论】:

  • 您是否打算将它们作为输入变量?
  • 是的,我正在使用这些参数。当我在 SSRS 中使用查询时它起作用了

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


【解决方案1】:

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

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

不过,这就是我在没有看到其余代码的情况下所能想到的。它也可能是报告服务本身的内容。

【讨论】:

  • 谢谢,我也觉得可能是这样。我试试看。
  • 是的,这真的是唯一让我觉得奇怪的东西。我认为无论您在报告服务上用户输入的任何参数都需要在那里。
  • 然后在 SSMS 中使用将要发送的典型参数自行测试 proc。一旦你知道它可以工作,就将它连接到报告中。然后,如果它在报告中不起作用,您知道这是您如何连接报告以使用 sp 的问题,而不是 sp。
  • 我现在收到我的无行消息。很奇怪。
  • 仍然没有运气,我按照帖子中提到的那样做了,但我仍然收到 no rows 消息:( @Tanner_Gram
【解决方案2】:

您需要让存储过程接受输入参数,以便 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...>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多