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