Hi,
I tried with this logic also,But this time it is showing datatype as numeric but it is not showing value(range.like numeric(38))Here we can refer numeric_precision to get that '38' as range value
DATA_TYPE
+ CASE
WHEN CHARACTER_MAXIMUM_LENGTH IS NULL
THEN ''
WHEN Cast(CHARACTER_MAXIMUM_LENGTH AS VARCHAR(5)) = - 1
THEN '(Max)'
ELSE '(' + Cast(CHARACTER_MAXIMUM_LENGTH AS VARCHAR(5)) + ')'
END AS [Type]