• I've used a function similar to MiddleDatestoTable in my apps, however I followed a different approach.

    Create Function dbo.udf_NumbersTable (

    @riStartingNumber Int, @riCount Int

    )

    Returns @tbl Table (SequenceNumber Int)

    As

    Begin

    -- Logic used from http://www.sqlservercentral.com/articles/Datetime+Manipulation/61822/

    ;With

    tblLevel0 As (Select 1 As C Union All Select 1), --2 rows

    tblLevel1 As (Select 1 As C From tblLevel0 As A, tblLevel0 As B),--4 rows

    tblLevel2 As (Select 1 As C From tblLevel1 As A, tblLevel1 As B),--16 rows

    tblLevel3 As (Select 1 As C From tblLevel2 As A, tblLevel2 As B),--256 rows

    tblLevel4 As (Select 1 As C From tblLevel3 As A, tblLevel3 As B),--65536 rows

    tblLevel5 As (Select 1 As C From tblLevel4 As A, tblLevel4 As B),--4294967296 rows

    tblSeq As (Select Row_Number() Over(Order By C) As N From tblLevel5)

    Insert Into @tbl( SequenceNumber )

    Select N + @riStartingNumber - 1 From tblSeq Where N Between 1 AND @riCount

    Return

    End

    Go

    Declare @dtStart DateTime, @dtEnd DateTime

    Declare @iDays Int

    -- Example values

    Set @dtStart = '20091201'

    Set @dtEnd = '20091225'

    -- Usage

    Set @iDays = DateDiff(d, @dtStart, @dtEnd) + 1

    Select DateAdd(d, SequenceNumber, @dtStart) As DateValue

    From dbo.udf_NumbersTable(0, @iDays)