空白日期参数而不是使用'允许空白'复选框

时间:2015-11-02 21:10:43

标签: sql sql-server reporting-services ssrs-2008 ssrs-2008-r2

我将尽力使用我需要的东西尽可能清楚。基本上,我有' FromDate'并且' ToDate'参数。默认情况下,我希望这些参数包含所有日期/时间。我可以通过检查“允许空值”并在主存储过程中处理NULL来实现此目的。不幸的是,业务用户不会理解Null复选框的含义。此外,我可以将默认日期设置为SQL Server支持的最早和最晚日期,但这很难看。因此,我需要一个解决方法。 我需要一些方法将这些参数默认为空值,这样当我运行报表时,无论日期如何,我都会立即返回记录。然后,如果用户想要调整日期,他们应该能够单击日历图标并选择从和日期(参数必须保持日期时间)。 有什么想法吗?

2 个答案:

答案 0 :(得分:0)

编辑:刚刚看到您正在使用SSRS - 您是否可以将包含from_date的文本框设为表达式:

=iif(Parameters!from_date="1753-01-01","",Parameters!from_date)

对于UI或报告,您是否可以将SQL最小日期值屏蔽为空字符串或"选择日期..."串?

if from_date_in_sql = '1753-01-01' then
    from_date_on_report = ""
end if

由于这只会影响报表/ UI显示日期的方式,因此您不必在SQL表中允许NULL日期。在保存时,你必须做相反的事情..如from_date_on_report =""然后设置from_date_to_save_to_SQL_table =' 1753-01-01'

答案 1 :(得分:0)

我会通过在存储过程中进行更改来使报表上的参数成为可选参数。

如果用户没有选择日期,请确保将null或没有值传递给参数(默认情况下将其设置为null),如果他们确实选择了日期,则应将日期值传递给过程和您的过程应该看起来像......

CREATE PROCEDURE my_report_Sp
  @StartDate DATE = NULL
 ,@EndDate   DATE = NULL
AS
BEGIN
   SET NOCOUNT ON;
   Declare @Sql NVARCHAR(MAX);

SET @Sql = N' SELECT * FROM TableName WHERE 1 = 1 '
        + CASE WHEN @StartDate IS NOT NULL
          THEN N' AND DateColumn >= @StartDate' ELSE N'' END
        + CASE WHEN @EndDate IS NOT NULL
          THEN N' AND DateColumn <= @EndDate' ELSE N'' END        

Exec sp_executesql @Sql 
                  ,N'@StartDate DATE,@EndDateDATE '
                  ,@StartDate
                  ,@EndDate

END