Si se trata de 30 dias es muy facil porque son exactamente 6 semanas (cada semana = 5 dias de trabajo).
El problema es con 32 dias por ejemplo que son 32/5=6 semanas completas y 32%5=2 dia mas que en Viernes (10/08/2012 es Viernes) deben pasarnos al proximo Martes..
La soulución es (en caso de 32 dias) restar de 10/08/2012 4 dias para llegar al previo Lunes,
y añadir 32+4=36 dias que son 36/5=7 semanas y 36%5=1 dias mas..
Mientras tanto hay que tomar en cuenta que en paises latinos @@DateFirst=1 que significa que Lunes es el primer dia de la semana (Lunes=1, Domingo=7),
y en paises "ingleses" @@DateFirst=7 y Domingo es el primer dia de la semana (Domingo=1, Lunes=2).
Finalmente la solución (esto es lo mas importante y no todo el bla-bla..):
Código SQL:
Ver originalDECLARE @D DATE='20120810',
@N INT=30;
SELECT DateAdd(DAY,-DatePart(WeekDay,@D)+(9-@@DateFirst)%7+(@N+DatePart(WeekDay,@D)-(9-@@DateFirst)%7)/5*7+(@N+DatePart(WeekDay,@D)-(9-@@DateFirst)%7)%5,@D);