Tento článek ukazuje, jak pomocí T-SQL změnit existující sloupec na vypočítaný sloupec na serveru SQL.
Vypočítaný sloupec je virtuální sloupec, který používá výraz k výpočtu své hodnoty. Výraz bude obvykle používat data z jiných sloupců. Vypočítaný sloupec není v tabulce fyzicky uložen, pokud není označen PERSISTED
.
Příklad 1 – Vytvoření tabulky BEZ vypočítaného sloupce
Nejprve vytvořte tabulku bez vypočítaný sloupec.
CREATE TABLE Person ( PersonID int IDENTITY (1,1) NOT NULL, FirstName varchar(70), LastName varchar(70), FullName varchar(140) );INSERT INTO Person (FirstName, Last Name, FullName)VALUES (' Homer', 'Seinfeld', 'Homer Seinfeld'), ('Bart', 'Costanza', 'Bart Costanza'), ('Marge', 'Kramer', 'Marge Kramer');SELECT *FROM Person;Výsledek:
+------------+-------------+------------+------ ----------+| ID osoby | Jméno | Příjmení | Celé jméno ||------------+-------------+------------+------- ---------|| 1 | Homer | Seinfeld | Homer Seinfeld || 2 | Bart | Costanza | Bart Costanza || 3 | Marge | Kramer | Marge Kramer |+------------+-------------+------------+------- ----------+Můžete vidět, že se při vkládání dat zdvojnásobuji. Celé jméno je kombinací křestního jména a příjmení a tato data přepisuji pro každý řádek.
To může také způsobit problémy při aktualizaci tabulky. Potřeboval bych si pamatovat aktualizovat dva sloupce, kdykoli někdo změnil své křestní nebo druhé jméno (a tři sloupce, pokud změnil oba).
Toto je dobrý kandidát na počítaný sloupec.
Příklad 2 – Změňte sloupec na vypočítaný sloupec
Chcete-li změnit sloupec na vypočítaný sloupec, musíte sloupec nejprve zrušit a poté jej vytvořit s novou definicí.
Zde je návod, jak změnit
FullName
sloupec na vypočítaný sloupec.ALTER TABLE Person DROP COLUMN Full Name;ALTER TABLE Person ADD Full Name AS (CONCAT(FirstName, ' ', LastName));Právě jsme „změnili“ sloupec s názvem
FullName
do vypočítaného sloupce. ZřetězíFirstName
aLastName
sloupce.Zde je to, co se stane, když vybereme obsah tabulky:
SELECT *FROM Person;Výsledek:
+------------+-------------+------------+------ ----------+| ID osoby | Jméno | Příjmení | Celé jméno ||------------+-------------+------------+------- ---------|| 1 | Homer | Seinfeld | Homer Seinfeld || 2 | Bart | Costanza | Bart Costanza || 3 | Marge | Kramer | Marge Kramer |+------------+-------------+------------+------- ----------+Příklad 3 – Aktualizace hodnoty
Nyní, pokud je aktualizována hodnota v
FirstName
neboLastName
sloupců, ovlivní to hodnotu vrácenou vypočítaným sloupcem. Není třeba jej aktualizovat ve dvou sloupcích.Příklad:
UPDATE PersonSET LastName ='Bourne'WHERE PersonId =3;SELECT *FROM Person;Výsledek:
+------------+-------------+------------+------ ----------+| ID osoby | Jméno | Příjmení | Celé jméno ||------------+-------------+------------+------- ---------|| 1 | Homer | Seinfeld | Homer Seinfeld || 2 | Bart | Costanza | Bart Costanza || 3 | Marge | Bourne | Marge Bourne |+------------+-------------+------------+------- ----------+