sub db_Staff_On_Site_Between_Two_Dates { my ($start,$end) = @_; die &Template ( "DevMgr/GenericError", {message => 'Missing start and/or end date in db_Staff_On_Site_Between_Two_Dates()'} ) unless ($start and $end); RunSQLReturnArrayRef( " declare \@start smalldatetime declare \@end smalldatetime set \@start = '$start' set \@end = '$end' create table #dates ([date] smalldatetime not null) declare \@datecount smalldatetime set \@datecount = \@start while (\@datecount <= \@end) begin insert into #dates values (\@datecount) set \@datecount = \@datecount + 1 end select p.person_id,convert(char(8),d.date,112),p.name from contract c inner join person p on c.person_id = p.person_id inner join #dates d -- cartesian join to date range, constrained only by contract DoA and DoL on d.date between isnull(c.doa,\@start) and isnull(c.dol,\@end) where p.discipline = 'development' order by d.date,p.name drop table #dates " ); }