CREATE FUNCTION ctFun_RoomConflict (@RoomID int, @iLength int, @StartTime datetime ) RETURNS int as BEGIN DECLARE @returnValue int DECLARE @EndTime datetime SET @EndTime = dateadd(mi,@iLength,@StartTime) /* Created variables @RangeFrom and @RangeTo */ DECLARE @RangeFrom datetime DECLARE @RangeTo datetime SET @RangeFrom=convert(varchar(10),@StartTime,110)+' 00:00:00' SET @RangeTo =convert(varchar(10),@StartTime,110)+' 23:59:59' /* Modified the query to use a derived query to first get all the records for just the selected date @RangeFrom and @RangeTo, this limited kept SQL from looking at all the records in the table, then applied my where clause for the @StartTime/@EndTime to the results of the derived query */ select @returnValue= (select count(det.meetingnumber) from ( select meetingnumber,begintime,endtime from dbo.meetings where iscancelled=0 and roomid = @RoomID and begintime between @RangeFrom and @RangeTo)det where @StartTime between Begintime and EndTime or @EndTime between BeginTime and EndTime ) return (@returnValue) END