W tym artykule pokazano, jak używać T-SQL do zmiany istniejącej kolumny na kolumnę obliczoną 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ę BEZ kolumny obliczonej
Najpierw utwórzmy stół bez kolumna obliczeniowa.
CREATE TABLE Person ( PersonID int IDENTITY (1,1) NOT NULL, FirstName varchar(70), LastName varchar(70), FullName varchar(140) ); INSERT INTO Person (FirstName, LastName, FullName) VALUES ('Homer', 'Seinfeld', 'Homer Seinfeld'), ('Bart', 'Costanza', 'Bart Costanza'), ('Marge', 'Kramer', 'Marge Kramer'); SELECT * FROM Person;
Wynik:
+------------+-------------+------------+----------------+ | PersonID | FirstName | LastName | FullName | |------------+-------------+------------+----------------| | 1 | Homer | Seinfeld | Homer Seinfeld | | 2 | Bart | Costanza | Bart Costanza | | 3 | Marge | Kramer | Marge Kramer | +------------+-------------+------------+----------------+
Widać, że podwajam się, kiedy wstawiam dane. Pełne imię i nazwisko jest kombinacją imienia i nazwiska i przepisuję te dane dla każdego wiersza.
Może to również powodować problemy podczas aktualizowania tabeli. Muszę pamiętać, aby zaktualizować dwie kolumny za każdym razem, gdy ktoś zmienił swoje imię lub nazwisko (i trzy kolumny, jeśli zmienił oba).
To dobry kandydat na kolumnę obliczeniową.
Przykład 2 – Zmień kolumnę na kolumnę obliczaną
Aby zmienić kolumnę na kolumnę wyliczaną, musisz najpierw upuścić kolumnę, a następnie utworzyć ją z nową definicją.
Oto jak zmienić FullName
kolumna do kolumny wyliczanej.
ALTER TABLE Person DROP COLUMN FullName; ALTER TABLE Person ADD FullName AS (CONCAT(FirstName, ' ', LastName));
Właśnie „zmieniliśmy” kolumnę o nazwie FullName
do kolumny wyliczanej. Łączy FirstName
i LastName
kolumny.
Oto, co się dzieje, gdy wybieramy zawartość tabeli:
SELECT * FROM Person;
Wynik:
+------------+-------------+------------+----------------+ | PersonID | FirstName | LastName | FullName | |------------+-------------+------------+----------------| | 1 | Homer | Seinfeld | Homer Seinfeld | | 2 | Bart | Costanza | Bart Costanza | | 3 | Marge | Kramer | Marge Kramer | +------------+-------------+------------+----------------+
Przykład 3 – Aktualizacja wartości
Teraz, jeśli wartość zostanie zaktualizowana w FirstName
lub LastName
kolumn, wpłynie to na wartość zwróconą przez wyliczoną kolumnę. Nie ma potrzeby aktualizowania go w dwóch kolumnach.
Przykład:
UPDATE Person SET LastName = 'Bourne' WHERE PersonId = 3; SELECT * FROM Person;
Wynik:
+------------+-------------+------------+----------------+ | PersonID | FirstName | LastName | FullName | |------------+-------------+------------+----------------| | 1 | Homer | Seinfeld | Homer Seinfeld | | 2 | Bart | Costanza | Bart Costanza | | 3 | Marge | Bourne | Marge Bourne | +------------+-------------+------------+----------------+