Este artículo demuestra cómo usar T-SQL para agregar una columna calculada a una tabla existente en SQL Server.
Una columna calculada es una columna virtual que utiliza una expresión para calcular su valor. La expresión generalmente usará datos de otras columnas. Una columna calculada no se almacena físicamente en la tabla a menos que esté marcada como PERSISTED
.
Ejemplo 1:crear una tabla SIN una columna calculada
Primero, creemos una tabla sin una columna calculada.
CREATE TABLE Products ( ProductID int IDENTITY (1,1) NOT NULL, ProductName varchar(255), Quantity smallint, Price money ); INSERT INTO Products (ProductName, Quantity, Price) VALUES ('Hammer', 5, 10), ('Corkscrew', 2, 7.50), ('Kettle', 3, 25.15); SELECT * FROM Products;
Resultado:
+-------------+---------------+------------+---------+ | ProductID | ProductName | Quantity | Price | |-------------+---------------+------------+---------| | 1 | Hammer | 5 | 10.0000 | | 2 | Corkscrew | 2 | 7.5000 | | 3 | Kettle | 3 | 25.1500 | +-------------+---------------+------------+---------+
Ejemplo 2:agregar una columna calculada
Ahora agreguemos una columna calculada.
ALTER TABLE Products ADD TotalValue AS (Quantity * Price);
Acabamos de agregar una columna calculada llamada TotalValue
que multiplica el valor en la Quantity
columna con el valor en el Price
columna.
Esto es lo que sucede cuando seleccionamos el contenido de la tabla ahora:
SELECT * FROM Products;
Resultado:
+-------------+---------------+------------+---------+--------------+ | ProductID | ProductName | Quantity | Price | TotalValue | |-------------+---------------+------------+---------+--------------| | 1 | Hammer | 5 | 10.0000 | 50.0000 | | 2 | Corkscrew | 2 | 7.5000 | 15.0000 | | 3 | Kettle | 3 | 25.1500 | 75.4500 | +-------------+---------------+------------+---------+--------------+
Ejemplo 3:actualizar un valor
Ahora, si se actualiza un valor en la Quantity
o Price
columnas, esto afectará el valor total devuelto por la columna calculada.
Ejemplo:
UPDATE Products SET Quantity = 4 WHERE ProductId = 1; SELECT * FROM Products;
Resultado:
+-------------+---------------+------------+---------+--------------+ | ProductID | ProductName | Quantity | Price | TotalValue | |-------------+---------------+------------+---------+--------------| | 1 | Hammer | 4 | 10.0000 | 40.0000 | | 2 | Corkscrew | 2 | 7.5000 | 15.0000 | | 3 | Kettle | 3 | 25.1500 | 75.4500 | +-------------+---------------+------------+---------+--------------+