• Another way, up to BIGINTs only

    DECLARE @num BIGINT = 985;

    WITH Tens(Pos,Val) AS (

    SELECT 1, CAST(1 AS BIGINT) UNION ALL

    SELECT 2, CAST(10 AS BIGINT) UNION ALL

    SELECT 3, CAST(100 AS BIGINT) UNION ALL

    SELECT 4, CAST(1000 AS BIGINT) UNION ALL

    SELECT 5, CAST(10000 AS BIGINT) UNION ALL

    SELECT 6, CAST(100000 AS BIGINT) UNION ALL

    SELECT 7, CAST(1000000 AS BIGINT) UNION ALL

    SELECT 8, CAST(10000000 AS BIGINT) UNION ALL

    SELECT 9, CAST(100000000 AS BIGINT) UNION ALL

    SELECT 10,CAST(1000000000 AS BIGINT) UNION ALL

    SELECT 11,CAST(10000000000 AS BIGINT) UNION ALL

    SELECT 12,CAST(100000000000 AS BIGINT) UNION ALL

    SELECT 13,CAST(1000000000000 AS BIGINT) UNION ALL

    SELECT 14,CAST(10000000000000 AS BIGINT) UNION ALL

    SELECT 15,CAST(100000000000000 AS BIGINT) UNION ALL

    SELECT 16,CAST(1000000000000000 AS BIGINT) UNION ALL

    SELECT 17,CAST(10000000000000000 AS BIGINT) UNION ALL

    SELECT 18,CAST(100000000000000000 AS BIGINT) UNION ALL

    SELECT 19,CAST(1000000000000000000 AS BIGINT))

    SELECT SUM((@num / Val) % 10)

    FROM Tens

    WHERE Val<=@num;

    ____________________________________________________

    Deja View - The strange feeling that somewhere, sometime you've optimised this query before

    How to get the best help on a forum

    http://www.sqlservercentral.com/articles/Best+Practices/61537