Eu tentei essa lógica com vários casos de borda e parece funcionar.
SELECT DATEDIFF(d, @dFrom, @dTo)/7+1
+ CASE WHEN DATEPART(dw,@dFrom) IN (1,7) THEN -1 ELSE 0 END
+ CASE WHEN DATEPART(dw,@dTo) IN (1,7) THEN -1 ELSE 0 END
Você pode alterar as instruções CASE dependendo de como deseja tratar os casos em que a data de início ou de término está em um fim de semana. No meu caso não estou incluindo o fim de semana se a data inicial ou final for sábado ou domingo.