This should solve it using a table of tables:
DECLARE @wkstartdate datetime = '2015-12-06', @wkenddate datetime = '2016-04-05' ;WITH N(N)AS (SELECT 1 FROM(VALUES(1),(1),(1),(1),(1),(1),(1),(1),(1),(1))M(N)), tally(N)AS(SELECT ROW_NUMBER()OVER(ORDER BY NN)FROM N,N a,N b,N c,N d,N e,N f) , alldays as ( SELECT top (datediff(d, @wkstartdate, @wkenddate)) cast(dateadd(d, N-1, @wkstartdate) as date) day FROM tally ) SELECT day FROM alldays WHERE datediff(d, 0, day) % 7 in(5,6)
EDIT Enhanced Version:
DECLARE @wkstartdate datetime = '2015-12-06', @wkenddate datetime = '2016-04-05' ;WITH N(N)AS (SELECT 1 FROM(VALUES(1),(1),(1),(1),(1),(1),(1),(1),(1),(1))M(N)), tally(N)AS(SELECT ROW_NUMBER()OVER(ORDER BY NN)FROM N,N a,N b,N c,N d,N e,N f) SELECT CAST(DATEADD(d, 0, N) as DATE) WEEKEND FROM tally WHERE N between datediff(d, 0, @wkstartdate) and datediff(d, 0, @wkenddate) AND N % 7 in(5,6)
Result:
day 2015-12-06 2015-12-12 2015-12-13 ... ... 2016-04-03