• This should fo the trick for you:

    -- Set year in a variable

    DECLARE @Year int

    SET @Year = 2010

    ;WITH Months AS (

    -- Create a month numbers CTE

    SELECT 1 AS MonthNumber

    UNION ALL SELECT 2

    UNION ALL SELECT 3

    UNION ALL SELECT 4

    UNION ALL SELECT 5

    UNION ALL SELECT 6

    UNION ALL SELECT 7

    UNION ALL SELECT 8

    UNION ALL SELECT 9

    UNION ALL SELECT 10

    UNION ALL SELECT 11

    UNION ALL SELECT 12

    UNION ALL SELECT 13

    ),

    Dates AS (

    -- Find first day of month

    SELECT monthNumber,

    firstDayOfMonth = DATEADD(month, monthNumber - 1, CONVERT(datetime, CAST(@Year as char(4)) + '0101', 112))

    FROM Months

    ),

    MonthRange AS (

    -- Find last day of month

    SELECT *, lastDayOfMonth = (

    SELECT TOP 1

    DATEADD(day, -1, firstDayOfMonth)

    FROM Dates

    WHERE MonthNumber = D.MonthNumber + 1

    )

    FROM Dates AS D

    WHERE monthNumber <= 12

    )

    SELECT *, firstSunday = (

    SELECT TOP 1

    DATEADD(day, monthNumber -1, firstDayOfMonth)

    FROM Months

    WHERE DATEPART(weekday, DATEADD(day, monthNumber -1, firstDayOfMonth)) = 1

    ORDER BY monthNumber

    ),

    lastSaturday = (

    SELECT TOP 1

    DATEADD(day, (-1) * (monthNumber -1), lastDayOfMonth)

    FROM Months

    WHERE DATEPART(weekday, DATEADD(day, (-1) * (monthNumber -1), lastDayOfMonth)) = 7

    ORDER BY monthNumber

    )

    FROM MonthRange

    Hope this helps

    Gianluca

    -- Gianluca Sartori