Tho*_*mas 24 reporting-services
我有一个存储过程,返回多个结果集,如下所示
Create StoredProcedure sp_MultipleDataSets
as
begin
SELECT EMPID, ENAME, JOB, SAL, DEPTID FROM EMP -- first result set
SELECT DEPTID, DNAME, LOC FROM DEPT --second result set
end
Run Code Online (Sandbox Code Playgroud)
在BIDS中,在创建新报告时,我为数据集配置了存储过程.它仅使用从第一个结果集返回的列创建数据集.它不识别第二个结果集.
如何为上述存储过程的结果集创建数据集
小智 38
不幸的是,正如文档中解释的那样:
如果通过单个查询检索到多个结果集,则仅处理第一个结果集,并忽略所有其他结果集.
(通过这个问题找到.)
因此,我建议使用以下两种可能性之一:
(1)将程序拆分为两个独立的程序 - 一个从EMP返回数据,一个从DEPT返回 - 并作为两个单独的数据集访问新程序.
(2)联合两个单独的查询(附加列以指示每行产生哪个查询)并适当地过滤或有条件地格式化报告.联合查询可能如下所示:
SELECT EMPID ID, ENAME NAME, JOB JOB_LOC, SAL, DEPTID, 'EMP' SOURCE
FROM EMP
UNION ALL
SELECT DEPTID ID, DNAME NAME, LOC JOB_LOC, NULL SAL, DEPTID DEPTID, 'DEPT' SOURCE
FROM DEPT
Run Code Online (Sandbox Code Playgroud)
我使用SP中的参数一直在SSRS中提取多个结果集.您必须通过SP中的IF语句将它们分开,然后您必须在SSRS数据集设置中手动输出FIELDS.
看起来很糟糕,但它确实有效......
这是一个例子.
存储过程(SP)有2个参数定义@OfficerID @DatasetFlag
@OfficerID是必须被传递或输入的Employee#(SSRS数据输入表单)DatasetFlag是我控制在SP中执行哪个IF语句的方式.
CREATE PROCEDURE [dbo].[StoredProcedureNameHere]
@OfficerID VARCHAR(7),
@DatasetFlag VARCHAR(60)
WITH RECOMPILE
AS
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
SET NOCOUNT ON;
BEGIN TRY
IF @DatasetFlag = 'EmployeeName'
Begin
SELECT [EmployeeName]
FROM [DatabaseName].[scema].[Employee]
where EmployeeBNumber = @OfficerID
END
ELSE
IF @DatasetFlag = 'Expect'
Begin
SELECT
[TerritoryName]
,[TestNumber]
,[RuleNumber]
,[Expectation]
,[TestCount]
,[PercentToGoal]
FROM [Database].[scema].[Table2]
WHERE OfficerID = @OfficerID
ORDER BY TerritoryID
,TestNumber
,RuleNumber
END
RETURN
GO
Run Code Online (Sandbox Code Playgroud)
REPORT有两个数据集,一个是我创建的,它将引入参数和EmployeeName我创建的另一个,它拉入EmployeeName,因为SSRS只能使用1个结果集〜!但是......我骗了它......
但我简单地通过OVERTYPING EMPLOYENAME创建FIELDS,然后添加其余的(查询)所以在DATASET的属性中编辑FIELDS并输入Select Column Names.
然后我使用PARAMETERS菜单(数据集属性)为第一个数据集输入="EmployeeName"的EXPRESSION,为第二个数据集输入="Expect".我也在那个屏幕上匹配@OfficeID.
然后,当我运行这个...它要求OfficerID(RS创建输入表单),当我输入ID并点击VIEW REPORT.或者我们可以使用OfficerID的所有RDL,就像SSRS表单一样,但是在ASPX页面中.
返回两个数据集(它称之为两次是我的假设)
所以不要对UNION数据集或其他技巧进行过滤,然后我必须在SSRS中处理,这不好玩......(严重的是IIF?)
我看到一个存储过程,其中我们有20个参数,因此您可以在SQL级别过滤报告的OUTPUT,而不是在报告中过滤怪物.
你能不能简单地创建20个存储过程,好吧,但是这样,所有代码都在一个位置,当然它可以使用选择到TEMP表来合并大量的东西,最后只需要填充一个表,即结果集..
作为一名程序员,我发现SSRS有点笨拙,但到目前为止我很开心,试图找到方法来获得我想要的东西,而不是它提供的东西......
| 归档时间: |
|
| 查看次数: |
44813 次 |
| 最近记录: |