简体   繁体   English

SSRS中存储过程中的多个数据集

[英]Multiple data sets in stored procedure in SSRS

I have a SP that returns four different result sets, but for it to be used in SSRS report i need to have it configured in a proper way. 我有一个返回四个不同结果集的SP,但是要在SSRS报告中使用它,我需要以适当的方式对其进行配置。

USE LearnShare
GO

IF OBJECT_ID (N'dbo.JH_LearnShare_ActiveUsers', N'P') IS NOT NULL 
DROP PROCEDURE dbo.JH_LearnShare_ActiveUsers
GO
    CREATE PROCEDURE dbo.JH_LearnShare_ActiveUsers
        @enddate as date
    AS
    Begin
--Declare @enddate as date
--set @enddate = '6/30/2014'
    Select COUNT (distinct p.PersonID) as [Total Active Users] --50621
    FROM Enrollment E inner join 
    Person p on p.PersonID = e.[Person ID]
    WHERE p.active = 1
    and FirstLaunch between DATEADD(m,-11,DATEADD(mm, DATEDIFF(m,0,@enddate), 0)) AND @enddate
--DATEADD(m,-11,DATEADD(mm, DATEDIFF(m,0,GETDATE()), 0)) AND GETDATE()
    and [Completion Date] between  DATEADD(m,-11,DATEADD(mm, DATEDIFF(m,0,@enddate), 0))   AND @enddate
--and convert(varchar(10),[Enrollment Date] , 120) < convert(varchar(10),FirstLaunch , 120) --118669
--and FirstLaunch <> '1900-01-01 00:00:00.000' -- this doesn't matter when adding [completion date] in where clause


    Select COUNT (distinct p.PersonID) as [Total Active Online Users] --49269
    FROM Enrollment E inner join 
    Person p on p.PersonID = e.[Person ID]
    left join class c
    on e.[resource id] = c.[resource id] 
    WHERE p.active = 1
    and FirstLaunch between DATEADD(m,-11,DATEADD(mm, DATEDIFF(m,0,@enddate), 0)) AND @enddate
--DATEADD(m,-11,DATEADD(mm, DATEDIFF(m,0,GETDATE()), 0)) AND GETDATE()
    and [Completion Date] between  DATEADD(m,-11,DATEADD(mm, DATEDIFF(m,0,@enddate), 0)) AND @enddate
    and c.[Resource ID] is null 


    select COUNT (distinct p.personID) as [User with ILT courses] --22656
    from Person p 
    inner join Enrollment e on p.PersonID = e.[Person ID]
    inner join Resources r on e.[Resource ID] = r.[Resource ID]
    inner join Class c on r.[Resource ID] = c.[Resource ID]
    where p.Active = 1
    and c.[Class Date] between DATEADD(m,-11,DATEADD(mm, DATEDIFF(m,0,@enddate), 0)) AND @enddate
    and e.FirstLaunch between DATEADD(m,-11,DATEADD(mm, DATEDIFF(m,0,@enddate), 0)) AND @enddate
--DATEADD(m,-11,DATEADD(mm, DATEDIFF(m,0,GETDATE()), 0)) AND GETDATE()
    and e.[Completion Date] between  DATEADD(m,-11,DATEADD(mm, DATEDIFF(m,0,@enddate), 0)) AND @enddate


    SELECT DateName(yyyy, FirstLaunch) EnrollmentYear, DATENAME(month, FirstLaunch) AS EnrollmentMonth , Count(distinct p.PersonID) as ActiveUsers --190312
    FROM Enrollment E inner join 
    Person p on p.PersonID = e.[Person ID]
    WHERE p.active = 1
    and FirstLaunch between DATEADD(m,-11,DATEADD(mm, DATEDIFF(m,0,@enddate), 0)) AND @enddate
    and [Completion Date] between DATEADD(m,-11,DATEADD(mm, DATEDIFF(m,0,@enddate), 0)) AND @enddate
--and convert(varchar(10),[Enrollment Date] , 120) < convert(varchar(10),FirstLaunch , 120) --118669
--and FirstLaunch <> '1900-01-01 00:00:00.000' -- this doesn't matter when adding [completion date] in where clause 
    AND [Completion Date] <> '1900-01-01 00:00:00.000'
    GROUP BY DateName(yyyy,FirstLaunch) , DATENAME(month,FirstLaunch), DATEPART(MONTH,FirstLaunch)
    ORDER BY DateName(yyyy,FirstLaunch) desc , DATEPART(MONTH,FirstLaunch) DESC

    End

I tried following 我尝试了以下

Create StoredProcedure sp_MultipleDataSets(@Param nvarchar(10))
as
begin
   if(@Param == "first")
      begin
         SELECT EMPID, ENAME, JOB, SAL, DEPTID FROM EMP -- first result set
      end
   if(@Param == "second")
      begin
        SELECT DEPTID, DNAME, LOC FROM DEPT --second result set
      end
end

Example adding if (@enddate == "first") begin select..... end but its giving me an error Msg 102, Level 15, State 1, Procedure JH_LearnShare_ActiveUsers, Line 15 Incorrect syntax near '='. 添加if(@enddate ==“ first”)开始选择的示例.....结束,但给我一个错误消息102,级别15,状态1,过程JH_LearnShare_ActiveUsers,第15行'='附近的语法不正确。

any help, please. 任何帮助,请。 Thanks! 谢谢!

I know this is late but maybe this response will help someone finding this later on. 我知道这很晚,但是也许此回复将有助于以后找到它的人。

You could write the SP in that way, however it seems unnecessarily complicated. 可以用这种方式编写SP,但是看起来不必要地复杂。 There should be no reason you can't just write 4 different stored procedures. 应该没有理由不能只编写4个不同的存储过程。 However, if you want to go down that route, that will work. 但是,如果您想走那条路,那将起作用。 EX: 例如:

IF @datasets = 1
begin
  select 1
end
IF @datasets = 2
begin
  select 2
end

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM