Ten artykuł pokazuje, jak używać T-SQL do tworzenia obliczonej kolumny w SQL Server.
kolumna obliczona to wirtualna kolumna, która używa wyrażenia do obliczenia swojej wartości. Wyrażenie zazwyczaj używa danych z innych kolumn. Obliczona kolumna nie jest fizycznie przechowywana w tabeli, chyba że jest oznaczona jako PERSISTED
.
Przykład 1 – Utwórz tabelę z obliczoną kolumną
Oto przykład tworzenia tabeli z obliczoną kolumną, wstawiania danych, a następnie wybierania zawartości tabeli.
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;
Wynik:
+-------------+---------------+------------+---------+--------------+ | 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 | +-------------+---------------+------------+---------+--------------+
W tym przypadku ostatnia kolumna jest kolumną wyliczaną. Mnoży kolumnę ilości przez kolumnę ceny. Dzięki temu możemy uzyskać całkowitą wartość produktu aktualnie znajdującego się w magazynie.
Przykład 2 – Tworzenie trwałej kolumny obliczeniowej
Możesz utworzyć trwałą kolumnę obliczaną, dodając PERSISTED
argument. Spowoduje to fizyczne przechowywanie obliczonej wartości w tabeli. Jeśli nie jest utrwalony, wartość jest obliczana za każdym razem, gdy czytasz obliczoną kolumnę.
Oto ten sam przykład kodu, co poprzedni, z tą różnicą, że tym razem tworzę utrwaloną kolumnę obliczeniową:
CREATE TABLE Products ( ProductID int IDENTITY (1,1) NOT NULL, ProductName varchar(255), Quantity smallint, Price money, TotalValue AS Quantity * Price PERSISTED );
Jedyną różnicą jest PERSISTED
argument.
Przykład 3 – Aktualizacja wartości
Teraz, jeśli wartość jest aktualizowana w Quantity
lub Price
kolumn, wpłynie to na całkowitą wartość zwróconą przez obliczoną kolumnę. Dzieje się tak niezależnie od tego, czy kolumna jest utrwalona, czy nie.
Jeśli ktoś kupi na przykład młotek, wpłynie to na całkowitą wartość zwracaną przez obliczoną kolumnę:
UPDATE Products SET Quantity = 4 WHERE ProductId = 1; SELECT * FROM Products;
Wynik:
+-------------+---------------+------------+---------+--------------+ | 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 | +-------------+---------------+------------+---------+--------------+