Scenariusz:
Pracujesz jako SQL Server Developer dla jednej z Kancelarii. Utworzyłeś tabelę dbo.Customer, korzystając z poniższej definicjiCREATE TABLE Customer ( CustomerId INT Identity(1, 1) ,FirstName VARCHAR(50) ,LastName VARCHAR(50) ,Age SMALLINT ,PhoneNumber CHAR(9) ,DOB DATE ,Gender CHAR(1) )
Musisz mieć pełne imię i nazwisko, które powinno składać się z imienia i nazwiska. Nie chcesz zapisywać zduplikowanych danych w tabeli, dodając nową kolumnę dla pełnego imienia i nazwiska. Jakie masz opcje?
Również w zależności od wieku, chcielibyśmy dodać nową kolumnę wywołać IsSenior i zaznaczyć ją jako 1, jeśli powyżej 65, inaczej 0.
Rozwiązanie:
SQL Server udostępnia nam Computed Column, czyli wirtualną kolumnę i nie przechowuje danych, chyba że jest oznaczona jako Persisted. Oznacza to, że możemy utworzyć kolumnę wyliczaną (Pełne imię), która będzie wykorzystywać dane Imię i Nazwisko. Tworząc kolumnę przeliczeniową nie musimy zapisywać zduplikowanych danych dla kolumny z pełną nazwą.Przejdźmy dalej i utwórzmy kolumny przeliczane pełne imię i nazwisko oraz IsSenior w zależności od naszych kryteriów.
CREATE TABLE Customer ( CustomerId INT Identity(1, 1) ,FirstName VARCHAR(50) ,LastName VARCHAR(50) ,Age SMALLINT ,PhoneNumber CHAR(9) ,DOB DATE ,Gender CHAR(1) ,FullName AS FirstName + ' ' + LastName ,IsSenior AS CASE WHEN Age > 65 THEN 1 ELSE 0 END )Połączyliśmy imię i nazwisko dla pełnego imienia i nazwiska i napisaliśmy Case Statement dla kolumny IsSenior Computer. Przejdźmy dalej i wstawmy kilka rekordów.
insert into dbo.Customer(FirstName,LastName,Age) Values('Aamir','Shahzad',66), ('Raza','M',44)
Zauważyłem, że nie wstawiłem niczego dla kolumn FullName i IsSenior. Wartości dla tych kolumn zostaną obliczone, gdy wybierzemy dane.
Jak dodać kolumny przeliczane w tabeli SQL Server — samouczek T-SQL
Jeśli musisz dodać kolumnę wyliczoną do tabeli wychodzącej, możesz użyć poniższej składni
Alter Table SchemaName.TableName
Dodaj ColumnName AS Logic (np. FistName +''+LastName)
Powiedzmy, że dodaj kolumnę FullName Computer do tabeli Customer, możemy użyć poniższego skryptu.
Alter table dbo.Customer Add FullName AS FirstName+' '+LastName
Upuść obliczoną kolumnę z tabeli SQL Server:
Składnia usuwania kolumny obliczonej lub normalnej jest taka sama.
Zmień nazwę schematu tabeli.Nazwa tabeli
upuść nazwę kolumny kolumny
Powiedzmy, czy chcemy usunąć Kolumna obliczana FullName z dbo.Customer Table. Możemy użyć poniższego skryptu.
Alter table dbo.Customer drop column FullName