繁体   English   中英

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

[英]Blank Date Parameter Rather than using 'Allow Null' Checkbox

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

编辑:刚刚看到您正在使用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'

通过在存储过程中进行更改,我将使参数在报告中成为可选参数。

如果用户不选择日期,请确保将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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM