Ваша проблема в том, что вы преобразуете в varchar без указания размера, вам нужно сделать CAST([col] AS VARCHAR(max)
DECLARE @CommaString nvarchar(max)
SET @CommaString = ''
SELECT @CommaString =
STUFF(
(SELECT ',' + cast(CAST( [col] as decimal(22,19)) as varchar(30)) FROM (
SELECT [a1] AS col FROM [#ta] UNION ALL
SELECT [a2] AS col FROM [#ta]
) alldata FOR XML PATH('') ) , 1 , 1 , '' )
PRINT @CommaString;
Проблема в том, что вы получите много нулей в виде десятичных дробей даже для целого числаценности.Вам, вероятно, нужно выполнить какое-то другое преобразование, если вас это волнует.
РЕДАКТИРОВАТЬ: Включая определение моей таблицы:
create table #ta
(
a1 int,
a2 float
)
РЕДАКТИРОВАТЬ: снова изменил определение таблицы с десятичного на плавающее для столбца b и добавил двойное приведение в моем запросе.
Теперь он производит: 1.0000000000000000000,1.0000000000000000000,0.6816728755107990500