【问题标题】:SSRS 2008 Wont return the correct Dataset from Stored ProcedureSSRS 2008 不会从存储过程返回正确的数据集
【发布时间】:2014-04-02 13:41:27
【问题描述】:

我有一个过程,它有多个查询,根据使用的参数运行。

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 Entity Framework 的技巧吗?我想念 EF 的灵活性,尤其是当我们在存储过程中做所有事情时,包括返回让我发疯的单个值。

【问题讨论】:

  • 您有 2 个 SP 和 2 个不同的结果集 => 您有 2 个报告。那两个报表的设计是一样的吗?
  • 这是一个单一的过程,它有多个可能的结果集,这些结果集取决于参数。每个报告的样式都将不同。
  • 关于 ADO.NET,我会提出一个解决方案,让您的 COM 组件调用基于 Enterprise Library 的单独 .NET 组件。作为论据,您只有一个:将优势货币化,将其转化为每月获得的小时数,然后输入数字。
  • 我们使用的自定义 ADO Classic 包装器是为了强迫我们使用 Procedures 太令人沮丧了!谢谢!

标签: sql sql-server stored-procedures reporting-services


【解决方案1】:

我会创建 2 个 SP,每个它们都为您的 2 个案例返回数据,然后您的“外观”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

【讨论】:

  • 谢谢!这是其中之一!为什么我没有想到那些时刻!当我们添加更多报告部分时,它会变得混乱。我去玩玩! :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-28
  • 2020-03-27
  • 1970-01-01
  • 1970-01-01
  • 2016-08-19
  • 2014-12-05
相关资源
最近更新 更多