Рекурсия и повторение зависят от бизнес-логики, которую Вы хотите реализовать, хотя в большинстве случаев это может использоваться попеременно. Большинство разработчиков идет для рекурсии, потому что легче понять.
Вычисляемые столбцы не могут ссылаться на другие вычисляемые столбцы. Хотя вы должны иметь возможность просто повторить выражение, на которое хотите сослаться. Из MSDN :
Вычисляемый столбец вычисляется из выражения, которое может использовать другие столбцы в той же таблице. Выражение может быть не вычисляемым именем столбца, константой, функцией или любой их комбинацией, связанной одним или несколькими операторами. Выражение не может быть подзапросом.
Я также должен добавить, что если бы это сработало так, как вы надеялись, это привело бы ко всем видам новых проблем, с которыми вам пришлось бы иметь дело. В настоящее время обновления во многих столбцах / строках происходят параллельно и атомарно.
Следовательно, было бы бессмысленно использовать вычисляемый столбец в ваших вычислениях, потому что это не у точно есть значение ... пока. Во всяком случае, вы бы использовали старое, не обновленное значение.
Если вы действительно хотите избежать дублирования выражения, вы можете сделать это в триггере, хотя я настоятельно рекомендую вам ] не этого делать. Триггеры не доставляют удовольствия, и их должны использовать только очень сообразительные люди в редких случаях.
Вы должны определить его для базовых столбцов в таблице .
computed_column_expression Является выражение, определяющее значение вычисляемый столбец. Вычисляемый столбец виртуальный столбец, который не физически хранится в таблице, если только столбец помечен НАСТОЯЩИМ. В столбец вычисляется из выражения который использует другие столбцы в том же Таблица. Например, вычисляемый столбец может иметь определение: стоимость КАК цена * кол-во. Выражение может быть не вычисляемым именем столбца, константой, функция, переменная и любые комбинация этих соединенных одним или несколько операторов. Выражение не может быть подзапросом или содержать псевдоним типы данных.
Хотя вы можете провести рефакторинг их обоих, чтобы использовать одну и ту же скалярную UDF (передавать все одни и те же столбцы) для упрощения обслуживания и обеспечения согласованности логики, снижение производительности будет огромным, и я использую только скалярные UDF в качестве в крайнем случае.