En SQL Server, una columna calculada es una columna virtual que utiliza una expresión para calcular su valor.
Una columna calculada normalmente utilizará datos de otras columnas en su cálculo. Si se actualizan los datos en cualquiera de esas columnas, la columna calculada reflejará automáticamente la actualización en su cálculo.
Ejemplo de una columna calculada
+------------+-------------+------------+----------------+ | PersonID | FirstName | LastName | FullName | |------------+-------------+------------+----------------| | 1 | Homer | Seinfeld | Homer Seinfeld | | 2 | Bart | Costanza | Bart Costanza | | 3 | Marge | Kramer | Marge Kramer | +------------+-------------+------------+----------------+
En este ejemplo, el FullName
columna es una columna calculada. Concatena los valores del FirstName
y LastName
columnas para calcular el nombre completo.
Sin la columna calculada, si desea seleccionar el nombre completo, debe hacer algo como esto:
SELECT FirstName + ' ' + LastName AS FullName FROM Person;
O podría usar CONCAT()
función, así:
SELECT CONCAT(FirstName, ' ', LastName) AS FullName FROM Person;
Cada vez que quisiera seleccionar un nombre completo de la tabla, necesitaría incluir la concatenación en su consulta.
Pero al usar una columna calculada como la anterior, podría hacer esto:
SELECT FullName FROM Person;
Beneficios de las columnas calculadas
Las columnas calculadas pueden ahorrar tiempo al escribir consultas, reducir errores e incluso mejorar el rendimiento.
Las columnas calculadas pueden ser útiles si ejecuta repetidamente la misma consulta una y otra vez, especialmente si esa consulta se basa en reglas comerciales que rara vez cambian.
La columna calculada en el ejemplo anterior podría ahorrarnos mucho tiempo en el futuro, porque no necesitaremos concatenar el nombre y el apellido cada vez que queramos seleccionar el nombre completo de alguien.
Ejemplos de casos de uso
Los ejemplos de dónde podría ser útil una columna calculada incluyen:
- Calcular la edad de una persona en función de su fecha de nacimiento en otra columna
- Concatenar nombre y apellido, en función de que el nombre esté en una columna y el apellido en otra
- Calcular el valor de inventario de un producto, basado en la cantidad de productos en stock en una columna y el precio en otra
- Calcule el IMC (índice de masa corporal) de una persona, en función de su altura y peso en otra columna
- Crear una columna de "Clasificación" que clasifique las filas en función de los valores de otras columnas
- Cálculo de los tiempos de carrera de los corredores de maratón, en función de su hora de inicio y hora de finalización en otras columnas
Persistencia de Columnas Calculadas
Una columna calculada no se almacena físicamente en la tabla a menos que esté marcada como PERSISTED
.
Si es no una columna calculada persistente, el cálculo ocurrirá cada vez que se acceda a la tabla.
Si es una columna calculada persistente, el valor calculado se almacena físicamente en la tabla. Es decir, no necesita calcular su valor cada vez que ejecuta una consulta. Si los datos se actualizan en una de las columnas de las que deriva su valor, el valor de la columna calculada se actualiza y almacena en la tabla. Esto puede ayudar con el rendimiento.
Tenga en cuenta que una columna calculada solo se puede conservar si es determinista. Si no es determinista, obtendrá un error si intenta persistir.
Un no determinista columna es aquella que devuelve valores diferentes incluso con la misma entrada. Por ejemplo, si usa la fecha actual en su cálculo, el valor será diferente cada día y se considerará no determinista.
Si simplemente está concatenando el nombre y el apellido, eso sería determinista y podría conservar esa columna.
Crear una columna calculada
Puede crear columnas calculadas desde la GUI de SSMS o con Transact-SQL.
En SSMS
En SSMS, mientras está en Diseñador de tablas , cree la columna que desea que sea la columna calculada (o simplemente selecciónela si ya existe), luego en Propiedades de columna pestaña, ingrese su fórmula en la Especificación de columna calculada campo de propiedad
No se preocupe por darle un tipo de datos a la columna calculada:SQL Server le dará un tipo de datos basado en su fórmula.
También puede seleccionar Sí para Persiste si lo desea.
Uso de T-SQL
Consulte Crear una columna calculada en SQL Server con T-SQL para ver un ejemplo de creación de una columna calculada con Transact-SQL.