2009-12-04 46 views

Respuesta

15

Las columnas calculadas no pueden hacer referencia a otras columnas calculadas. Aunque deberías poder repetir la expresión a la que te gustaría hacer referencia. From MSDN:

Una columna calculada se calcula a partir de una expresión que puede usar otras columnas en la misma tabla. La expresión puede ser un nombre de columna no computada, constante, función y cualquier combinación de estos conectados por uno o más operadores. La expresión no puede ser una subconsulta.

Debo añadir que si esto funcionara como esperaría, presentaría toda clase de problemas nuevos con los que tendría que lidiar. Actualmente, las actualizaciones en muchas columnas/filas ocurren en paralelo y atómicamente.

Por lo tanto, no tendría sentido utilizar una columna calculada en el cálculo porque no sería exactamente tener un valor ... todavía. En todo caso, estarías usando un valor anterior, sin actualizar.

Si realmente quería evitar la duplicación de la expresión, que podría hacer esto en un disparador, aunque yo le impulso fuertemente no hacer eso. Los desencadenantes no son divertidos y solo deberían ser utilizados por personas muy inteligentes en casos excepcionales.

+0

_... sería presentar todo tipo de temas nuevos ..._ La única cuestión se impide referencias circulares (donde hacen referencia a dos columnas calculadas entre sí), que tendrían que ser impedido de todos modos para que el servidor lo soporta, ya que tendría que determinar el orden para calcular las columnas. – Trisped

6

tiene que definir que against the base columns in the table.

computed_column_expression Es una expresión que define el valor de una columna calculada . Una columna calculada es una columna virtual que no es almacenado físicamente en la tabla, a menos que la columna está marcada PERSISTED. La columna se calcula a partir de una expresión que utiliza otras columnas en la misma tabla . Por ejemplo, una columna calculada puede tener la definición: costo AS precio * cantidad. La expresión puede ser un nombre no calculada columna, constante, función, variable, y cualquier combinación de éstos conectado por uno o más operadores. La expresión no puede ser una subconsulta ni contener alias tipos de datos.

Aunque se puede refactorizar los dos para utilizar el mismo UDF escalar (pasa en todas las mismas columnas) para facilitar el mantenimiento y garantizar la coherencia de la lógica, el impacto en el rendimiento sería enorme, y sólo utilizar las UDF escalares como una último recurso.

Cuestiones relacionadas