【问题标题】:SQL Server Reporting Services not passing the correct parameter from SQL Stored ProcedureSQL Server Reporting Services 未从 SQL 存储过程传递正确的参数
【发布时间】:2019-11-02 12:16:13
【问题描述】:

我有一个 SQL 存储过程,它调用某个周期的最近日期。此日期包括填充到报告中的一堆数据点。当我单独执行 SELECT 语句时,它会提取我想要的正确日期。在 SSRS 中,它会拉倒倒数第二个日期......我在那里有 TOP 1 来选择最近的日期以及 DESC。我想知道我在 SSRS 中的参数是否有问题。报告设置为 2 个子报告。第一个子报告只是一个概览页面,第二个是包含所有数据的实际报告以及开始和结束日期。 @Phase1Start 和 @Phase1End 是传递给包含所有数据点的子报告的参数。另外,我在 1 周围没有单引号的原因是因为 CycleComplete 有点。有什么解决办法吗?

我已经试过了:

-将日期类型从日期时间更改为文本 - 包括 1 周围的单引号

这是我的存储过程:

DECLARE @Phase1Start as datetime
DECLARE @Phase1End as datetime

  SELECT
        @Phase1Start = (SELECT TOP 1 [CycleStartedOn] FROM [dbo].[IPEC_P_CIP_TKB_PREFLT] WHERE [CycleComplete] = 1 ORDER BY [CycleStartedOn] DESC) 
        ,@Phase1End = (SELECT TOP 1 [CycleEndedOn] FROM [dbo].[IPEC_P_CIP_TKB_PREFLT] WHERE [CycleComplete] = 1 ORDER BY [CycleStartedOn] DESC) 

  DECLARE @tblReports TABLE
(    
    Phase1Start datetime
    ,Phase1End datetime
    )

    INSERT INTO @tblReports
(    
    Phase1Start 
    ,Phase1End 
    )

Values
(   
    @Phase1Start
    ,@Phase1End
    )

SELECT * FROM @tblReports

END

存储过程可以正确编译并给出我想要的开始和结束时间。问题在于 SSRS 没有从存储过程中提取正确的日期,即使我将 @Phase1Start 和 Phase1End 作为我的参数传递给包含所有数据的子报告。

【问题讨论】:

  • 你在本地开发吗?
  • 感谢您的快速回复。 SSRS 和 SQL 数据库都驻留在我正在使用的同一台服务器上,是的。基本上没有,我正在使用虚拟机。
  • 您能否在 VS 中点击报表工具栏上的刷新箭头或刷新数据集以确保您没有遇到缓存问题。在开发模式下,数据缓存在 *.data 文件中。
  • 这似乎没有任何改变。不过感谢您的回复。
  • 您的参数可以使用查询来设置。创建一个 SELECT Top(1) Phase1Start = [CycleStartedOn], Phase1End = [CycleEndedOn] FROM [dbo].[IPEC_P_CIP_TKB_PREFLT] WHERE [CycleComplete] = 1 ORDER BY [CycleStartedOn] DESC 的数据集并在参数的默认值下,从查询中选择获取值,选择新数据集并选择正确的列对于每个参数

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


【解决方案1】:

您可以使用该组

SELECT  @Phase1Start = MAX([CycleStartedOn] ) ,
        @Phase1End = MAX([CycleEndedOn])
FROM        [dbo].[IPEC_P_CIP_TKB_PREFLT] 
WHERE    [CycleComplete] = 1 

【讨论】:

  • 这没有编译。不过感谢您的反馈。
  • 格式化时遗漏了逗号,现在可以进行编辑了。
  • 太棒了,谢谢。编译得很好,但没有解决我的问题.. 嗯...
【解决方案2】:

是否有可能我们的第一个子查询和第二个子查询返回不同的记录?也许这可能会有所帮助:

SELECT Top(1) @Phase1Start = [CycleStartedOn], @Phase1End = [CycleEndedOn] FROM [dbo].[IPEC_P_CIP_TKB_PREFLT] WHERE [CycleComplete] = 1 ORDER BY [CycleStartedOn] DESC

【讨论】:

  • 感谢您的反馈,遗憾的是,它提供的输出与我最初的输出相同。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-13
  • 1970-01-01
  • 1970-01-01
  • 2015-12-20
相关资源
最近更新 更多