Yo no veo ningún bug, si en alguna base lo conseguiste y en otra no, será porque los datos son diferentes, y si lo son y te da un error, será porque te excedes de algún rango permitido. Los números de precisión exacta no pueden disponer de más de 38 dígitos. Se me ocurre lo siguiente. Según el ejemplo que expones.
Declare @var varchar(100) = '9063,664733395696913002806361085126286249';
Select
-- extraemos la parte a la izquierda de la coma.
LEFT(@var,
case
when charindex(',', @var) > 0 then
charindex(',', @var) - 1
else 0
end)
-- extraemos la parte de la derecha de la coma
, RIGHT(@var,
case
when charindex(',', @var) > 0 then
LEN(@VAR) - charindex(',', @var)
else LEN(@VAR)
end)
-- Esta sería la parte entera en un decimal
, TRY_CAST(LEFT(@var,
case
when charindex(',', @var) > 0 then
charindex(',', @var) - 1
else 0
end) AS decimal(38, 0))
-- Esta sería la parte flotante en un decimal
, CAST(RIGHT(@var,
case
when charindex(',', @var) > 0 then
LEN(@VAR) - charindex(',', @var)
else LEN(@VAR)
END) AS decimal(38, 0));
El resultado.
De esta forma, tienes el número completo. Luego ya el tratamiento que le des, es otro escenario. Decimal y Numeric Float y Real