我想限制用户无法搜索超过一年的时间范围。因此1/1/2014
到1/1/2015
有效,但1/1/2014
到3/1/2015
无效。他们在SSRS报告中的日期选择器中输入日期。
WHERE "view"."myDate" between @firstDate and @secondDate
我是否可以将WHERE
原因置于可以影响这些限制的原因中?
答案 0 :(得分:4)
您可以在WHERE子句中添加DATEDIFF项检查,以将范围限制为一年;
AND DATEDIFF(d, @firstDate, @secondDate) < 366
但是,如果范围超过一年,则不返回任何内容。如果您希望查询返回多达数年的结果,那么您可以使用类似的内容;
WHERE "view"."myDate" between @firstDate and
CASE
WHEN DATEDIFF(d, @firstDate, @secondDate) < 366 THEN @secondDate
ELSE DATEADD(d, 365, @firstDate)
END
如果要在用户提供无效范围时引发错误,则必须使用数据源的存储过程并执行参数验证。像这样的东西;
CREATE PROC dbo.GetMyData ( @firstDate date, @secondDate ) AS
BEGIN
IF (DATEDIFF(d, @firstDate, @secondDate) > 365)
BEGIN
RAISERROR('Please restrict searches to less than a year.', 16, 1)
RETURN
END
SELECT ...
WHERE "view"."myDate" between @firstDate and @secondDate
END