2009-12-04 3 views

ответ

15

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

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

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

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

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

+0

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

6

Вы должны определить его against the base columns in the table.

computed_column_expression Является выражение, которое определяет значение вычисляемого столбца. Вычисленным столбцом является виртуальный столбец, который не является физически хранится в таблице, если только столбец не отмечен PERSISTED. Столбец вычисляется из выражения , которое использует другие столбцы в той же таблице . Например, вычисленный столбец может иметь определение: стоимость AS цена * кол-во. Выражение может быть именем неиспользуемого столбца, константой, функцией, переменной и любыми комбинацией из них, связанной одним или более операторами. Выражение не может быть подзапросом или содержать псевдонимы .

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

Смежные вопросы