CREATE PROCEDURE BLABLABLA( @DATE1 DATETIME = NULL, @DATE2 DATETIME = NULL ) AS BEGIN SELECT COL1, COL2 FROM THE_TABLE WHERE THE_TABLE.DATETIMEFIELD BETWEEN ISNULL(@DATE1, THE_TABLE.DATETIMEFIELD) AND COALESCE(@DATE2, @DATE1, THE_TABLE.DATETIMEFIELD) END
Another choice, having lost some expressiveness, but probably using indexes, might be:
CREATE PROCEDURE BLABLABLA( @DATE1 DATETIME = NULL, @DATE2 DATETIME = NULL ) AS BEGIN SELECT COL1, COL2 FROM THE_TABLE WHERE (THE_TABLE.DATETIMEFIELD >= @DATE1 OR @DATE1 IS NULL) AND (THE_TABLE.DATETIMEFIELD <= @DATE2 OR THE_TABLE.DATETIMEFIELD = @DATE1 OR (@DATE1 IS NULL AND @DATE2 IS NULL)) END
source share