Вычисляемый столбец на основе другого вычисляемого столбца?

Рекурсия и повторение зависят от бизнес-логики, которую Вы хотите реализовать, хотя в большинстве случаев это может использоваться попеременно. Большинство разработчиков идет для рекурсии, потому что легче понять.

11
задан AHiggins 16 October 2015 в 14:01
поделиться

2 ответа

Вычисляемые столбцы не могут ссылаться на другие вычисляемые столбцы. Хотя вы должны иметь возможность просто повторить выражение, на которое хотите сослаться. Из MSDN :

Вычисляемый столбец вычисляется из выражения, которое может использовать другие столбцы в той же таблице. Выражение может быть не вычисляемым именем столбца, константой, функцией или любой их комбинацией, связанной одним или несколькими операторами. Выражение не может быть подзапросом.

Я также должен добавить, что если бы это сработало так, как вы надеялись, это привело бы ко всем видам новых проблем, с которыми вам пришлось бы иметь дело. В настоящее время обновления во многих столбцах / строках происходят параллельно и атомарно.

Следовательно, было бы бессмысленно использовать вычисляемый столбец в ваших вычислениях, потому что это не у точно есть значение ... пока. Во всяком случае, вы бы использовали старое, не обновленное значение.

Если вы действительно хотите избежать дублирования выражения, вы можете сделать это в триггере, хотя я настоятельно рекомендую вам ] не этого делать. Триггеры не доставляют удовольствия, и их должны использовать только очень сообразительные люди в редких случаях.

16
ответ дан 3 December 2019 в 05:12
поделиться

Вы должны определить его для базовых столбцов в таблице .

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

Хотя вы можете провести рефакторинг их обоих, чтобы использовать одну и ту же скалярную UDF (передавать все одни и те же столбцы) для упрощения обслуживания и обеспечения согласованности логики, снижение производительности будет огромным, и я использую только скалярные UDF в качестве в крайнем случае.

6
ответ дан 3 December 2019 в 05:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: