我有一个像这样的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中调用它。问题是,在为此创建数据集时,我收到一个错误:
您的数据集必须至少包含一个字段
在这种情况下可以做些什么?
答案 0 :(得分:1)
您有此错误消息,因为SSRS无法从查询中推断出您的架构 您可以在 DataSet Properties =>中手动声明您的字段。 字段:
字段名称,字段来源
修改强>
如果您确实想拥有动态列并且无法定义静态列名称,可以尝试this之类的技巧。
我们的想法是创建一个返回包含列标题和值的Arraylist的函数。
答案 1 :(得分:0)
为什么不通过创建查询类型"存储过程"?
的数据集来执行过程通过执行此操作,您将能够在数据集中看到从SP返回的字段。
您还可以通过创建报告参数将参数值传递给SP。
修改强>
如何在SSRS中将参数传递给SP:
create procedure [dbo].[TestProcpk] @value varchar(20) as select * from testProc where value = @value
您必须创建与上述名称相同的参数,例如 @value 。
我在 testProc :
中有以下数据ID |值
1 | XXX
2 | YYY
3 | ZZZ
如果我运行参数值为xxx的报告,我将只获得1 | xxx。
此外,从下拉列表中选择SP后,您无需指定任何内容。
你怎么不能将param值传递给SP?