То, что вам нужно, лучше подходит для функции, чем для процедуры, но это означает, что вы должны определить тип возвращаемого значения.
CREATE FUNCTION [dbo].[GetMoney]
@userId int,
@month DateTime
RETURNS
AS
BEGIN
....
SELECT @result = @something
RETURN @result
END
Тогда вы будете использовать его следующим образом:
SELECT dbo.GetMoney(t.userid, t.month)
Но я хочу подчеркнуть, что вы думаете о подходе процедурного / OO-программирования в мире на основе SET, ине рекомендую заниматься этим.Он не будет работать хорошо, поэтому он не будет масштабироваться при увеличении нагрузки.