Columna calculada basada en otra columna calculada?
-
12-09-2019 - |
Pregunta
Tengo una llamada Cost
columna calculada que devuelve el dinero.
Quiero tener otra columna que devuelve (Cost * 2
), pero no me permite.
Solución
Las columnas calculadas no pueden hacer referencia a otras columnas calculadas. A pesar de que debería ser capaz de simplemente repetir la expresión que le gustaría hacer referencia. De MSDN :
A columna calculada se calcula a partir de una expresión que puede utilizar otras columnas en la misma tabla. La expresión puede ser un no calculada nombre de columna, constante, función, y cualquier combinación de éstos conectados por uno o más operadores. La expresión no puede ser una subconsulta.
También me gustaría añadir que si esto llegara a trabajar como es de esperar, sería presentar todo tipo de nuevas cuestiones que le tiene que tratar. En la actualidad, muchas actualizaciones a través de columnas / filas se producen en paralelo y de forma atómica.
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, sería el uso de un viejo valor, des-actualizada.
Si realmente quería evitar la duplicación de la expresión, que podría hacer esto en un disparador, aunque insto encarecidamente no hacer eso. Los factores desencadenantes son ninguna diversión y sólo debe ser utilizado por personas muy inteligentes en casos raros.
Otros consejos
Hay que definirlo contra las columnas de base en la tabla .
Es un computed_column_expression 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 la columna está marcada PERSISTED. los columna se calcula a partir de una expresión que utiliza otras columnas de la misma mesa. Por ejemplo, una columna calculada puede tener la definición: el costo como el precio * Cant. La expresión puede ser un nombre de columna no, constante, función, variable, y cualquier combinación de éstos conectado por uno o más operadores. La expresion no puede ser un sub consulta o contener alias tipos de datos.
A pesar de que podría refactorizar que ambos utilizan 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 último recurso.