• I prefer this alternative.  Not for performance reasons, mostly that it allows easier customization of the suffix chars to be assigned.  Sometimes certain chars, such as I and O, are skipped because they look too much like numbers.  Also, the logic below is clearer to me, although that could just be me.

    ;WITH cte_suffix_chars AS (
      SELECT 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' AS suffix_chars
    )
    SELECT A.PONUMBER, A.PODATE,
      A.PONUMBER + SUBSTRING(suffix_chars, ISNULL(CHARINDEX(POSUFFIX, suffix_chars) + rank_num, 1), 1) AS PONUMBERTOUSE
    FROM (
      SELECT *, DENSE_RANK() OVER(PARTITION BY PONUMBER ORDER BY PODATE) AS rank_num
      FROM #PONUMBERTESTIMPORT
    ) AS A
    CROSS JOIN cte_suffix_chars
    LEFT OUTER JOIN (
      SELECT LEFT(PONUMBER, LEN(PONUMBER) - 1) AS PONUMBER, MAX(RIGHT(PONUMBER, 1)) AS POSUFFIX  
      FROM #PONUMBERTEST
      WHERE RIGHT(PONUMBER, 1) NOT LIKE '[0-9]'
      GROUP BY LEFT(PONUMBER, LEN(PONUMBER) - 1)
    ) AS T ON T.PONUMBER = A.PONUMBER

    SQL DBA,SQL Server MVP(07, 08, 09) A socialist is someone who will give you the shirt off *someone else's* back.