我使用带参数的查询在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”时它不会。
有什么想法吗?
答案 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...>