Тази статия демонстрира как да използвате T-SQL за създаване на изчислена колона в SQL Server.
изчислена колона е виртуална колона, която използва израз за изчисляване на стойността си. Изразът обикновено използва данни от други колони. Изчислена колона не се съхранява физически в таблицата, освен ако не е маркирана PERSISTED
.
Пример 1 – Създайте таблица с изчислена колона
Ето пример за създаване на таблица с изчислена колона, вмъкване на данни и след това избиране на съдържанието на таблицата.
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;
Резултат:
+-------------+---------------+------------+---------+--------------+ | 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 | +-------------+---------------+------------+---------+--------------+
В този случай последната колона е изчислена колона. Той умножава колоната количество по колоната цена. Това ни позволява да получим общата стойност на продукта, който в момента е на склад.
Пример 2 – Създаване на постоянна изчислена колона
Можете да създадете постоянна изчислена колона, като добавите PERSISTED
аргумент. Това ще доведе до това, че изчислената стойност ще бъде физически съхранена в таблицата. Ако не се запази, тогава стойността се изчислява всеки път, когато четете изчислената колона.
Ето същия пример за код като предишния, с изключение на това, че създавам постоянна изчислена колона:
CREATE TABLE Products ( ProductID int IDENTITY (1,1) NOT NULL, ProductName varchar(255), Quantity smallint, Price money, TotalValue AS Quantity * Price PERSISTED );
Единствената разлика е PERSISTED
аргумент.
Пример 3 – Актуализиране на стойност
Сега, ако стойността се актуализира в Quantity
или Price
колони, това ще повлияе на общата стойност, върната от изчислената колона. Това ще се случи независимо дали колоната е запазена или не.
Ако някой купи чук например, това ще повлияе на общата стойност, върната от изчислената колона:
UPDATE Products SET Quantity = 4 WHERE ProductId = 1; SELECT * FROM Products;
Резултат:
+-------------+---------------+------------+---------+--------------+ | 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 | +-------------+---------------+------------+---------+--------------+