Вот почему вы не должны хранить столбцы с такими поворотами. Было бы намного проще справиться с этим, если бы каждый столбец «period» находился в отдельной строке.
Для начала, вот запрос, который делает то, что вы хотите:
select b.*, @x, running.periodsum
from budget b outer apply
(select sum(v.period) as periodsum
from (values (1, b.period1), (2, b.period2), . . . (12, b.period12)) v(n, period)
where v.n <= @x
) running;
И вам не нужно делать это хранимой процедурой. Вы можете сделать это пользовательской табличной функцией.