Вам нужно извлечь числовую часть, а затем преобразовать в целое число, прежде чем вы сможете упорядочить, как вам нужно
STUFF(CashierDepositCode, 1, @AbbrvCount - 1, '')
, чтобы извлечь числовую часть кода.Но результат все еще в строке.Поэтому, если вы закажете его, «10» появится раньше, чем 9
Измените на следующее
SET @CDCode =
(
SELECT CONCAT('CD',
@Abbreviation,
ISNULL(( SELECT TOP 1 STUFF(CashierDepositCode, 1, @AbbrvCount - 1, '')
FROM CashierDepositSlips
WHERE SUBSTRING(CashierDepositCode, 3, LEN(@Abbreviation)) = @Abbreviation
ORDER BY CONVERT(INT, STUFF(CashierDepositCode, 1, @AbbrvCount - 1, '')) DESC) + 1, '1'))
)
Кроме того, если префикс CD
фиксирован, то он будет лучшеизменить WHERE
на
WHERE CashierDepositCode LIKE 'CD' + @Abbreviation + '%'