T-SQL存储过程日期变量

时间:2016-11-16 11:47:34

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

我有这个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参数中,如果我设置了默认值,我就无法编辑日期值。请看图片,

enter image description here

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

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

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

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

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