あなたのクエリは正しい結果を返すと思いますが、少し単純化できます.
ただし、SET DATEFIRST に依存しています。
datepart(dw,[Date]) = 1
SET DATEFIRST
の場合、月曜日の数を数えます は 1 です。
これを試してください:
set datefirst 7 -- Sunday
select datepart(dw, '20111227')
set datefirst 1 -- Monday
select datepart(dw, '20111227')
結果:
-----------
3
-----------
2
更新: 同じことを行う別のクエリ。
select count(*) as Daycount
from master..spt_values as Number
where Number.type = 'P' and
dateadd(day, Number.number, @StartDate) <= @EndDate and
datepart(dw, dateadd(day, Number.number, @StartDate)) = 1