[英]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.