Ir al contenido principal

COLUMNA CALCULADA


Una columna calculada es una columna virtual que no se almacena físicamente en la tabla, a menos que la columna esté marcada como PERSISTA. Una expresión de columna calculada puede usar datos de otras columnas para calcular un valor para la columna a la que pertenece. 




Limitaciones:

  • Una columna calculada no se puede usar como una definición de restricción DEFAULT o FOREIGN KEY o con una definición de restricción NOT NULL. Sin embargo, si el valor de la columna calculada se define mediante una expresión determinista y el tipo de datos del resultado está permitido en las columnas de índice, una columna calculada puede usarse como una columna clave en un índice o como parte de cualquier restricción PRIMARY KEY o UNIQUE. Por ejemplo, si la tabla tiene columnas enteras a y b, la columna calculada a + b puede indexarse, pero la columna calculada a + DATEPART (dd, GETDATE ()) no puede indexarse, porque el valor puede cambiar en invocaciones posteriores.
  • Una columna calculada no puede ser el objetivo de una instrucción INSERT o UPDATE.

Caso práctico:
Creamos una tabla:

CREATE TABLE SALES_ORDERS (
       SALE_ID INT IDENTITY(1,1),
       PRODUCT_ID INT,
       QUANTITY INT,
       PRICE MONEY,
       SALES_DATE DATETIME,
       TOTAL_SALE_AMOUNT AS (QUANTITY * PRICE)
);

Tenga en cuenta que TOTAL_SALE_AMOUNT es una columna calculada que se calcula automáticamente cada vez que se hace referencia en una instrucción SELECT

SELECT OBJECT_NAME(OBJECT_ID) AS TABLE_NAME,NAME AS COLUMN_NAME,DEFINITION
FROM SYS.COMPUTED_COLUMNS
WHERE OBJECT_NAME(OBJECT_ID) ='SALES_ORDERS'




Ingresamos datos en nuestra tabla

INSERT INTO [dbo].[SALES_ORDERS]
           ([PRODUCT_ID]
           ,[QUANTITY]
           ,[PRICE]
           ,[SALES_DATE])
     VALUES (2,10,3,getdate())

En la columna calculada automáticamente se inserta el dato de acuerdo a la definición de la columna.
Si consultamos la tabla:

SELECT * FROM SALES_ORDERS





Observamos que en la columna calculada se muestra el resultado de acuerdo a la definición.

Referencia: @ldomar.mc
https://zeytol.com

Comentarios

Publicar un comentario

Entradas populares de este blog

HABILITAR Y DESHABILITAR CONSTRAINTS

Para modificar la estructura de una base de datos de Microsoft SQL Server, puede ser necesario desactivar temporalmente las constraints que tenga. Por ejemplo, para vaciar los datos de una base de datos, sin tener que pensar el orden correcto para que no salten las restricciones si tenemos ya claro que queremos vaciarla entera. Nota:  Se aplica a partir de la versión 2016 En SQL Server podemos desactivarlas de una en una, o bien deshabilitar constraints con una instrucción todas las de una tabla. -- Para deshabilitar una única constraint ALTER TABLE MyTable NOCHECK CONSTRAINT MyConstraint -- Para habilitar una única constraint ALTER TABLE MyTable CHECK CONSTRAINT MyConstraint -- Para deshabilitar todas las constraints de una tabla ALTER TABLE MyTable NOCHECK CONSTRAINT ALL -- Para desabilitar todos los constraint de una tabla ALTER TABLE MyTable CHECK CONSTRAINT ALL Recuerda que, si has cambiado datos de la tabla, al volve...

DELETE VS TRUNCATE

El comando TRUNCATE, lo que hace es desasociar las páginas de datos de la tabla, sin alterar los registros en sí mismo, mientras que el DELETE recorre cada uno de los registros y los marca como borrados, por lo tanto, hace muchas más operaciones de I/O, que aumenta exponencialmente en relación con TRUNCATE, a medida que aumenta el tamaño de la tabla. Cuando trabajamos con tablas que tienen millones de registros nos preguntamos si debemos utilizar DELETE o TRUNCATE, ¿cuál es más óptimo? referente al rendimiento de nuestro servidor, ¿es posible revertir la operación si comenzamos una transacción?, descubramos en el siguiente caso: Caso práctico En primer lugar crearemos una tabla e insertamos datos de prueba. -- Creamos la tabla CREATE TABLE Employee (        Empid int NOT NULL,        Name nchar ( 10 ) NULL,        City nchar ( 10 ) NULL ) ON [PRIMARY] GO -- Inserta...