Den här artikeln visar hur man använder T-SQL för att ändra en befintlig kolumn till en beräknad kolumn i SQL Server.
En beräknad kolumn är en virtuell kolumn som använder ett uttryck för att beräkna dess värde. Uttrycket kommer vanligtvis att använda data från andra kolumner. En beräknad kolumn lagras inte fysiskt i tabellen om den inte är markerad med PERSISTED
.
Exempel 1 – Skapa en tabell UTAN en beräknad kolumn
Låt oss först skapa en tabell utan en beräknad kolumn.
SKAPA TABELL Person ( PersonID int IDENTITET (1,1) INTE NULL, Förnamn varchar(70), Efternamn varchar(70), Fullständigt Namn varchar(140) );INSERT I Person (Förnamn, Efternamn, Fullnamn)VÄRDEN (' Homer', 'Seinfeld', 'Homer Seinfeld'), ('Bart', 'Costanza', 'Bart Costanza'), ('Marge', 'Kramer', 'Marge Kramer');VÄLJ *FRÅN Person;Resultat:
+------------+-------------+------------+------ ----------+| PersonID | Förnamn | Efternamn | Fullständigt namn ||------------+-------------+------------+------- ----------|| 1 | Homer | Seinfeld | Homer Seinfeld || 2 | Bart | Costanza | Bart Costanza || 3 | Marge | Kramer | Marge Kramer |+------------+-------------+------------+------ ----------+Du kan se att jag fördubblas när jag infogar data. Det fullständiga namnet är en kombination av förnamn och efternamn, och jag skriver om denna information för varje rad.
Detta kan också orsaka problem vid uppdatering av tabellen. Jag måste komma ihåg att uppdatera två kolumner varje gång någon ändrade sitt för- eller andranamn (och tre kolumner om de ändrade båda).
Detta är en bra kandidat för en beräknad kolumn.
Exempel 2 – Ändra kolumnen till en beräknad kolumn
För att ändra en kolumn till en beräknad kolumn måste du först släppa kolumnen och sedan skapa den med den nya definitionen.
Så här ändrar du
FullName
kolumn till en beräknad kolumn.ALTER TABLE Person DROP COLUMN FullName;ALTER TABLE Person ADD FullName AS (CONCAT(FirstName, ' ', Efternamn));Vi har precis "ändrat" kolumnen
FullName
till en beräknad kolumn. Den sammanfogarFirstName
ochLastName
kolumner.Så här händer när vi väljer tabellens innehåll:
VÄLJ *FRÅN person;Resultat:
+------------+-------------+------------+------ ----------+| PersonID | Förnamn | Efternamn | Fullständigt namn ||------------+-------------+------------+------- ----------|| 1 | Homer | Seinfeld | Homer Seinfeld || 2 | Bart | Costanza | Bart Costanza || 3 | Marge | Kramer | Marge Kramer |+------------+-------------+------------+------ ----------+Exempel 3 – Uppdatera ett värde
Nu, om ett värde uppdateras i
FirstName
ellerLastName
kolumner, kommer detta att påverka värdet som returneras av den beräknade kolumnen. Du behöver inte uppdatera den i två kolumner.Exempel:
UPPDATERA PersonSET LastName ='Bourne'WHERE PersonId =3;VÄLJ *FRÅN Person;Resultat:
+------------+-------------+------------+------ ----------+| PersonID | Förnamn | Efternamn | Fullständigt namn ||------------+-------------+------------+------- ----------|| 1 | Homer | Seinfeld | Homer Seinfeld || 2 | Bart | Costanza | Bart Costanza || 3 | Marge | Bourne | Marge Bourne |+------------+-------------+------------+------ ----------+