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

StackOverflow https://stackoverflow.com/questions/1844452

Вопрос

У меня есть вычисляемый столбец под названием Cost это возвращает деньги.

Я хочу иметь еще один столбец, который возвращает (Cost * 2), но это мне не позволяет.

Это было полезно?

Решение

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

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

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

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

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

Другие советы

Вы должны определить это по отношению к базовым столбцам таблицы.

computed_column_expression - это выражение, которое определяет значение вычисляемого столбца.Вычисляемый столбец - это виртуальный столбец, который физически не хранится в таблице, если только столбец не помечен как СОХРАНЕННЫЙ. Столбец вычисляется из выражения , которое использует другие столбцы в той же таблице.Например, вычисляемый столбец может иметь определение:стоимость КАК цена * кол-во.Выражением может быть невычисляемое имя столбца, константа, функция, переменная и любая комбинация из них, связанная одним или несколькими операторами.Выражение не может быть вложенным запросом или содержать псевдоним типы данных.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top