我有一份SSRS报告,我在其中传递开始日期和结束日期以过滤我的数据。我需要获取那些在传递的日期值之间有数据的记录。我的查询如下..
SELECT * FROM Sample s WHERE s.RecStartDate >= ISNULL(@StartDate,s.RecStartDate)
AND s.RecEndDate <= ISNULL(@EndDate,s.RecEndDate)
在这里我必须处理&#39; NULL&#39;数据来自两个不同的领域。但问题是,在我的SSRS报告中,这两个日期的默认值是“TODAY&#39;”。当我选择@StartDate作为&#39; TODAY&#39;和@EndDate为10/12/2010,它永远不会按照上述条件工作。请帮我解决这个问题。
谢谢, 苏。
答案 0 :(得分:1)
创建以下过程并在报告的数据集中使用此存储过程。
CREATE PROCEDURE dbo.SomeReportProc
@StartDate DATETIME,
@EndDate DATETIME
AS
BEGIN
SET NOCOUNT ON;
DECLARE @Sql NVARCHAR(MAX);
SET @Sql = N'SELECT * FROM Sample s WHERE 1 = 1 '
+ CASE WHEN @StartDate IS NOT NULL
THEN N' AND s.RecStartDate >= @StartDate ' ELSE N'' END
+ CASE WHEN @EndDate IS NOT NULL
THEN N' AND s.RecEndDate <= @EndDate ' ELSE N'' END
EXECUTE sp_executesql @Sql
,N'@StartDate DATETIME, @EndDate DATETIME'
,@StartDate
,@EndDate
END
注意强>
另外请确保选择参数类型为datetime
,这样当用户输入日期时,他们会使用漂亮的GUI来选择日期,而不是以不同的格式插入日期。
日期时间参数ON报告
日期时间参数属性