空白日期参数而不是使用“允许空”复选框
Posted
技术标签:
【中文标题】空白日期参数而不是使用“允许空”复选框【英文标题】:Blank Date Parameter Rather than using 'Allow Null' Checkbox 【发布时间】:2015-11-02 21:10:43 【问题描述】:我会尽量清楚我在这里需要什么。基本上,我有“FromDate”和“ToDate”参数。默认情况下,我希望这些参数包括所有日期/时间。我可以通过检查“允许 Nulls”并在主存储过程中处理 NULL 来实现这一点。不幸的是,业务用户不会理解 Null 复选框的含义。此外,我可以将默认日期设置为 SQL Server 支持的最早和最晚日期,但这很难看。因此,我需要解决这个问题。 我需要一些方法让这些参数默认为空白值,这样当我运行报告时,无论日期如何,我都会立即取回记录。然后,如果用户想要调整日期,他们应该能够单击日历图标并选择从和到日期(参数必须保持日期时间)。 有什么想法吗?
【问题讨论】:
日期时间不能是“空白值”。空字符串将被隐式转换为 1900-01-01。当参数是可选的时,为什么使用默认值是一个丑陋的解决方案? 【参考方案1】:编辑:刚刚看到您正在使用 s-s-rS - 您能否将包含 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'
【讨论】:
不幸的是,没有办法屏蔽参数标签,因为我仍然需要日历弹出窗口才能工作:/【参考方案2】:我会通过更改存储过程来使报告中的参数成为可选参数。
如果用户不选择日期,请确保将 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
【讨论】:
以上是关于空白日期参数而不是使用“允许空”复选框的主要内容,如果未能解决你的问题,请参考以下文章
jquery脚本检查文本框是不是为空,或者复选框是不是被选中