SSRS在SP中使用动态字段的问题

时间:2015-05-21 09:30:45

标签: reporting-services reportingservices-2005

我有一个像这样的SP:

ALTER PROCEDURE [dbo].[ReportGateWay]
(
    @ISO  bigint= 0,
    @Gateway  bigint= 0
)
AS
BEGIN
    DECLARE @SQL nvarchar(max)
    SET @SQL= 'SELECT * FROM
                (
                    SELECT DISTINCT I.DBAName [ISOName], BG.GatewayName
                    FROM Iso I
                    LEFT OUTER JOIN BusinessGateway BG 
                    ON I.GatewayName = BG.MerchantBusinessGatewayId AND I.IsActive = 1 and BG.IsActive = 1
                    WHERE ('+CAST(@ISO AS varchar(10))+' = 0 OR I.IsoId = '+ CAST(@ISO AS varchar(10)) +')
                    AND  ('+CAST(@Gateway AS varchar(10))+' = 0 OR BG.MerchantBusinessGatewayId = '+ CAST(@Gateway AS varchar(10)) +')

                ) AS tb1
            PIVOT
            (
                Count(GatewayName) for GatewayName in ('+ SUBSTRING((SELECT ',[' + BG.GatewayName + ']' FROM BusinessGateway BG 
                WHERE @Gateway = 0 OR BG.MerchantBusinessGatewayId = @Gateway
                FOR XML PATH('')), 2, 200000 ) + ')
            ) AS pvt
            ORDER BY pvt.ISOName'

    EXECUTE (@SQL)

END

我需要在SSRS中调用它。问题是,在为此创建数据集时,我收到一个错误:

  

您的数据集必须至少包含一个字段

在这种情况下可以做些什么?

2 个答案:

答案 0 :(得分:1)

您有此错误消息,因为SSRS无法从查询中推断出您的架构 您可以在 DataSet Properties =>中手动声明您的字段。 字段

字段名称字段来源

  • ISOName,ISOName
  • Gateway1,Gateway1
  • Gateway2,Gateway2

修改

如果您确实想拥有动态列并且无法定义静态列名称,可以尝试this之类的技巧。
我们的想法是创建一个返回包含列标题和值的Arraylist的函数。

答案 1 :(得分:0)

为什么不通过创建查询类型"存储过程"?

的数据集来执行过程

通过执行此操作,您将能够在数据集中看到从SP返回的字段。

您还可以通过创建报告参数将参数值传递给SP。

修改

如何在SSRS中将参数传递给SP:

  1. 说你有sp如下:
  2. create procedure [dbo].[TestProcpk] @value varchar(20)
    as
    select * from testProc where value = @value
    
    1. 您必须创建与上述名称相同的参数,例如 @value

    2. 我在 testProc

      中有以下数据

      ID |值

      1 | XXX

      2 | YYY

      3 | ZZZ

    3. 如果我运行参数值为xxx的报告,我将只获得1 | xxx。

    4. 此外,从下拉列表中选择SP后,您无需指定任何内容。

      你怎么不能将param值传递给SP?