Share via


Columnas calculadas

Las columnas calculadas se calculan a partir de una expresión que puede utilizar otras columnas de la misma tabla. La expresión puede ser un nombre de columna no calculada, una constante, una función, una variable o cualquier combinación de estos elementos conectados mediante uno o más operadores. La expresión no puede ser una subconsulta.

Por ejemplo, en la base de datos AdventureWorks, la columna TotalDue de la tabla Sales.SalesOrderHeader incluye la definición: TotalDue AS Subtotal + TaxAmt + Freight.

Si no se especifica lo contrario, las columnas calculadas son columnas virtuales no almacenadas físicamente en la tabla. Sus valores se vuelven a calcular cada vez que se utilizan en una consulta. SQL Server 2005 Database Engine (Motor de base de datos de SQL Server 2005) utiliza la palabra clave PERSISTED en las instrucciones CREATE TABLE y ALTER TABLE para almacenar físicamente las columnas calculadas de la tabla. Sus valores se actualizan cuando cambia alguna columna que forma parte de su cálculo. Si se define una columna calculada como PERSISTED, se puede crear un índice en una columna calculada determinista pero no precisa. Además, si una columna calculada hace referencia a una función CLR, Database Engine (Motor de base de datos) no puede comprobar si la función es realmente determinista. En este caso, la columna calculada debe establecerse en PERSISTED para que se puedan crear índices en ella. Para obtener más información, vea Crear índices en columnas calculadas.

[!NOTA] Las columnas calculadas que se utilizan como columnas de partición en una tabla con particiones deben establecerse explícitamente en PERSISTED.

Las columnas calculadas se pueden utilizar en las listas de selección, cláusulas WHERE, cláusulas ORDER BY u otras ubicaciones en las que se puedan utilizar expresiones regulares, con las siguientes excepciones:

  • Las columnas calculadas que se utilizan como restricciones CHECK, FOREIGN KEY o NOT NULL deben marcarse como PERSISTED. Es posible utilizar una columna calculada como columna de clave en un índice o como parte de una restricción PRIMARY KEY o UNIQUE, si el valor de la columna calculada está definido mediante una expresión determinista y el tipo de datos del resultado es válido en columnas de índice.
    Por ejemplo, si la tabla incluye columnas de tipo entero a y b, la columna calculada a + b se puede indizar, pero la columna calculada a + DATEPART(dd, GETDATE()) no se puede indizar, ya que el valor puede cambiar en llamadas posteriores.
  • Una columna calculada no puede ser el destino de una instrucción INSERT o UPDATE.

Database Engine (Motor de base de datos) determina automáticamente la posibilidad de que de las columnas calculadas acepten valores NULL según las expresiones utilizadas. Se considera que el resultado de la mayoría de las expresiones acepta valores NULL, incluso si sólo están presentes las columnas que no aceptan valores NULL, ya que los posibles desbordamientos también darán como resultado valores NULL. Utilice la función COLUMNPROPERTY con la propiedad AllowsNull para determinar si las columnas calculadas de una tabla aceptan valores NULL. Una expresión que acepta valores NULL se puede convertir en una que no los acepta si se especifica ISNULL(check_expression**,**constant), donde constant es un valor no NULL reemplazado por cualquier resultado NULL.

Vea también

Otros recursos

CREATE TABLE (Transact-SQL)
COLUMNPROPERTY (Transact-SQL)

Ayuda e información

Obtener ayuda sobre SQL Server 2005