我有一个具有多个Query的过程,它根据使用的参数运行。
If Reportname = 'Foo'
Begin
Select Forename, Surname, Jobtitle, Gender from Staff where X = y
End
If ReportName = 'Bar'
Begin
Select EnrolmentID, StudentID, EnrolmentStartDate, EnrollmentExpectedEndDate, Status from Enrolment where y = Z
End
如果我在SSMS中运行它,它会返回正确的记录和列。 在SSRS中,当我选择过程并设置参数时,它将可用列定义为过程的第一个Select语句中包含的列。
此过程将用于各种不同的报告和后端处理,理想情况下我不想加倍代码。
是否有人就如何让SSRS检测到正在应用的正确上下文有任何建议?
我知道我可以将一些核心逻辑改为表值函数,它返回一些适用于所有情况的通用数据。
由于
还有没有人有说服我的老板从ADO Classic升级到ADO.Net实体框架的提示?我错过了EF的灵活性,特别是当我们在存储过程中执行所有操作时,包括返回单个值会让我发疯。
答案 0 :(得分:1)
我会创建2个SP,每个SP返回2个案例的数据,然后您设置为报告来源的“facade”SP可能如下所示:
CREATE TABLE #ReportTable(col1 ID, col2 varchar(80), etc)
IF Reportname = 'Foo'
Begin
INSERT #ReportTable(col1, col2, ...)
EXEC dbo.GetDataForReport1 '7131', 25
End
IF ReportName = 'Bar'
Begin
INSERT #ReportTable (col1, col2, ...)
EXEC dbo.GetDataForReport2 '7131', 25
End
SELECT col1, col2, ...
FROM #ReportTable