Try this,Hope this will help you.
declare @sDate datetime,
@eDate datetime;
select @sDate = '11/4/2014 08:00:00' ,
@eDate = '11/4/2014 20:00:00';
;with cte as
(
select @sDate StartDate
,datepart(hour, @sDate) StartTime
, datepart(hour, dateadd(Hour, 1, @sDate)) as EndTime
,convert(varchar(8),datepart(hour, @sDate))
+ ' - '
+ convert(varchar(8),datepart(hour, dateadd(Hour, 1, @sDate))) as Hours
union all
select dateadd(Hour, 1, StartDate)
,datepart(hour, dateadd(Hour, 1, StartDate)) StartTime
, datepart(hour, dateadd(Hour, 2, StartDate)) as EndTime
,convert(varchar(8),datepart(hour, dateadd(Hour, 1, StartDate)))
+ ' - '
+ convert(varchar(8),datepart(hour, dateadd(Hour, 2, StartDate))) as Hours
FROM cte
WHERE dateadd(Hour, 1, StartDate)<= @eDate
)
select * from cte
option (maxrecursion 0)