• I really don't like the WHILE loop in there.

    I use this code, (which may or may not be from Jeff Moden) which requires a table of numbers from 1 to 8000:

    ALTER FUNCTION dbo.TableFromList(@List varchar(8000))

    RETURNS TABLE

    AS RETURN

    SELECT LTRIM(RTRIM(SUBSTRING(ListID, number+1, CHARINDEX(',', ListID, number+1)-number - 1))) AS Value

    FROM (SELECT ',' + @List + ',' AS ListID) AS InnerQuery

    JOIN Numbers n

    ON n.Number < LEN(InnerQuery.ListID)

    WHERE SUBSTRING(ListID, number, 1) = ','