Este artículo demuestra cómo usar T-SQL para crear una columna calculada 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 con una columna calculada
Este es un ejemplo de cómo crear una tabla con una columna calculada, insertar datos y luego seleccionar el contenido de la tabla.
CREATE TABLE Products ( ProductID int IDENTITY (1,1) NOT NULL, ProductName varchar(255), Quantity smallint, Price money, TotalValue AS Quantity * Price ); 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 | TotalValue | |-------------+---------------+------------+---------+--------------| | 1 | Hammer | 5 | 10.0000 | 50.0000 | | 2 | Corkscrew | 2 | 7.5000 | 15.0000 | | 3 | Kettle | 3 | 25.1500 | 75.4500 | +-------------+---------------+------------+---------+--------------+
En este caso, la última columna es una columna calculada. Multiplica la columna de cantidad por la columna de precio. Esto nos permite obtener un valor total del producto actualmente en stock.
Ejemplo 2:crear una columna calculada persistente
Puede crear una columna calculada persistente agregando PERSISTED
argumento. Esto dará como resultado que el valor calculado se almacene físicamente en la tabla. Si no se conserva, el valor se calcula cada vez que lee la columna calculada.
Este es el mismo ejemplo de código que el anterior, excepto que esta vez creo una columna calculada persistente:
CREATE TABLE Products ( ProductID int IDENTITY (1,1) NOT NULL, ProductName varchar(255), Quantity smallint, Price money, TotalValue AS Quantity * Price PERSISTED );
La única diferencia es el PERSISTED
argumento.
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. Esto ocurrirá tanto si la columna se mantiene como si no.
Si alguien compra un martillo, por ejemplo, esto afectará el valor total devuelto por la columna calculada:
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 | +-------------+---------------+------------+---------+--------------+