• Sorry if I'm just being dense by asking this, I've never used STR() either so this is new to me. The article says many people use STR() for its ability to right-justify figures, and that besides the rounding issues, which I understand and am now aware of, there is a performance penalty when using it. You then run a timed test to compare it to a more complex, but quicker approach. However when I run a modified version of the code (to strip out the timing code - I'll take your word for it it's quicker) and the output to a variable, the faster approach doesn't right justify the data like STR() does.

    Here is what I'm running (limited to 10 rows here)

    --===== Conditionally drop and rebuild a test table in a nice safe place

    -- that everyone has. This only takes several seconds.

    IF OBJECT_ID('tempdb..#MyHead','U') IS NOT NULL

    DROP TABLE #MyHead

    ;

    SELECT TOP 10

    SomeNumber = IDENTITY(INT,1,1)

    INTO #MyHead

    FROM sys.all_columns ac1

    CROSS JOIN sys.all_columns ac2

    ;

    SELECT RIGHT('0000000000' + CAST(SomeNumber AS VARCHAR(10)),10)

    FROM #MyHead

    ;

    SELECT STR(SomeNumber,10)

    FROM #MyHead

    and here is the output

    (10 row(s) affected)

    ----------

    0000000001

    0000000002

    0000000003

    0000000004

    0000000005

    0000000006

    0000000007

    0000000008

    0000000009

    0000000010

    (10 row(s) affected)

    ----------

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    (10 row(s) affected)

    Is there something I'm not understanding, or am doing incorrectly? I would expect that any alternative would output the same results as STR(). Any insight would be appreciated.

    Thanks

    Paul