【问题标题】:T-SQL stored procedure date variableT-SQL 存储过程日期变量
【发布时间】:2017-03-30 14:33:35
【问题描述】:

我有这个 T-SQL 存储过程:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE dbo.datealter 
    @LastChangeDate AS date 
AS
BEGIN
    SELECT 
        s.[DivNo]as Division,
        SUM(CASE WHEN s.Date = @LastChangeDate 
                   THEN s.SELLINC ELSE 0 END) ActualSales
    FROM 
        [dbo].[NewLayerReports] s 
    WHERE 
        s.BRN = 1
    GROUP BY 
        s.[DivNo]
END
GO

当我执行它时它工作正常。

我在 SSRS 报告中使用此存储过程。当我执行 SSRS 报告时,它要求我输入或选择日期。

在这里,我一直想要一个显示去年当前月份的日历。例如,如果我在 2016 年 11 月运行报告,则日历应显示 2015 年 11 月。

请问我们该怎么做?

在 SSRS 参数中,如果我设置默认值,我无法编辑日期值。请看图,

【问题讨论】:

  • 那么您希望Last Change Date 参数的默认值是这一天但上一年?
  • @iamdave 不,我希望用户选择日期。所以日期会有所不同。
  • 日期选择器最初会显示默认值,然后显示用户选择的任何日期。您不能让用户选择一个日期,然后在仍然使用日期选择器的同时显示另一个日期。如果您只想显示相对日期,请参阅下面我编辑的答案。

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


【解决方案1】:

您可以为参数指定默认值。在参数的默认值中给出表达式Date.Now.Date.AddYears(-1)。当您运行报告时,它将显示上一年的同一个月。

【讨论】:

  • 如果你想使用 SSRS 参数,这个答案会起作用。
【解决方案2】:

如果要在 SSRS 中设置参数的默认值,请右键单击参数并选择属性。在默认值屏幕中,您可以设置返回日期的表达式。

要获得去年的这一天,您可以使用: =today.AddYears(-1)

不过,如果您想要月初,您还需要添加日期: =today.AddYears(-1).AddDays(1-today.day())


如果出现,您只想显示相对于用户选择的日期。在这种情况下,您可以根据需要在报表元素中使用上述表达式(例如报表顶部的标题),但将 today 的任何实例替换为 Parameters!ParameterName.Value

【讨论】:

  • 谢谢,我不想设置默认日期。因为用户不能编辑日期。我只是想显示去年的日历(这样用户无需单击日历中的多个后退按钮即可到达去年)并且用户需要选择日期。我已上传问题中的屏幕截图。
  • @user2331670 在您的比较日期参数中,您可以根据我上面的表达式设置默认值,但请参考 Primary 参数。如果这样做的目的只是显示日期,那么您将完全错误地进行此操作。关于“如果我设置默认值我无法编辑值”是的,你当然可以。您是否错误地设置了可用值字段?
  • 是的,我的主要目的是简单地显示去年的日期,以便用户可以根据自己的要求进行选择。请问我怎样才能做到这一点?
  • @user2331670 您只能让该参数显示用户选择的日期。如果他们需要选择上一年,那么他们可以只输入他们需要的日期,而不是使用选择器。鉴于您的参数名称和存储过程的作用,我认为您的问题比目前报告的外观更大,因为您的参数建议了一个日期范围,但您的过程提取了一天的值。
  • @user2331670 此外,只需根据我上面的答案设置默认值,当用户选择日期选择器时,它将显示去年的默认值。当您说设置默认值会阻止用户更改日期值时,您可能完全错了。
猜你喜欢
  • 2014-09-04
  • 1970-01-01
  • 2018-10-03
  • 2013-05-28
  • 1970-01-01
  • 1970-01-01
  • 2011-08-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多