• I like the trick for handling the DATEFIRST.  With it, you can write the function in 3 lines without recursion, which I think is a bit more elegant.

    CREATE FUNCTION dbo.fnGetNextBusinessDay (@Date datetime) RETURNS datetime AS

    BEGIN

         SET @Date = DATEADD(dd, 1, CONVERT(datetime, (CONVERT(CHAR(10), @Date, 101))))

         WHILE ((@@DATEFIRST + DATEPART(dw, @Date) - 1) % 7) + 1 IN (1, 7) OR @Date IN (SELECT HolidayDate FROM Holiday) SET @Date = DATEADD(dd, 1, @Date)

         RETURN @Date

    END