Вы приводите число к varchar(1)
- и любое число, состоящее более чем из одной цифры, переполняет один символ и поэтому превращается в звездочки (*
).
При приведении целочисленных значений лучше всего использовать varchar(11)
, поскольку он охватывает максимальное количество символов, которое может потребоваться для отображения целого числа.
Минимальное значение int
равно -2 147 483 648 - для удаления разделителей тысяч используются 10 цифр и знак минуса:
-2147483648
123456789 1 (10 is missing in the chars count to make it more clear)
Кстати, в T-Sql есть лучшие способы агрегирования строк.
Для версий до 2017 года используйте комбинацию stuff
и for xml path
, например:
SELECT STUFF(
(
SELECT '; ' + CAST(id as varchar(11)) + '. ' + name
FROM #test
FOR XML PATH('')
),1 ,2, '')
Для версии 2017 или выше используйте встроенную функцию string_agg
, например:
SELECT STRING_AGG(CAST(id as varchar(11)) + '. '+ name, '; ')
FROM #Test
для получения дополнительной информации, прочитайте этот пост.