Pregunta

Tengo una llamada Cost columna calculada que devuelve el dinero.

Quiero tener otra columna que devuelve (Cost * 2), pero no me permite.

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top