Одним из способов сделать это является использование рекурсивного cte:
declare @num int = 690644694;
with cte as (
select @num as num, @num % 10 as digit
union all
select num / 10, num / 10 % 10
from cte
where num > 0
)
SELECT SUM(digit)
FROM cte
Результат: 48
Другой вариант, который, вероятно, должен иметь лучшую производительность (не то, что его можно измеритьдля единственного целого) - использовать десятичные числа cte:
declare @num int = 690644694;
With Tally as
(
SELECT TOP 10 POWER(10, (ROW_NUMBER() OVER(ORDER BY @@SPID))-1) As n
FROM sys.objects
)
SELECT SUM(@num / n % 10)
FROM Tally
WHERE n <= @num
(максимальное значение int
на сервере sql имеет 10 цифр - отсюда top 10
- значения в tally cte1, 10, 100, .... 1000000000)