Dit artikel laat zien hoe u T-SQL kunt gebruiken om een bestaande kolom te wijzigen in een berekende kolom in SQL Server.
Een berekende kolom is een virtuele kolom die een uitdrukking gebruikt om de waarde ervan te berekenen. De expressie gebruikt doorgaans gegevens uit andere kolommen. Een berekende kolom wordt niet fysiek opgeslagen in de tabel, tenzij deze is gemarkeerd als PERSISTED
.
Voorbeeld 1 – Maak een tabel ZONDER een berekende kolom
Laten we eerst een tabel maken zonder een berekende kolom.
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;
Resultaat:
+------------+-------------+------------+----------------+ | PersonID | FirstName | LastName | FullName | |------------+-------------+------------+----------------| | 1 | Homer | Seinfeld | Homer Seinfeld | | 2 | Bart | Costanza | Bart Costanza | | 3 | Marge | Kramer | Marge Kramer | +------------+-------------+------------+----------------+
Je kunt zien dat ik verdubbel als ik gegevens invoeg. De volledige naam is een combinatie van de voornaam en achternaam, en ik typ deze gegevens voor elke rij opnieuw.
Dit kan ook problemen veroorzaken bij het bijwerken van de tabel. Ik moet onthouden dat ik twee kolommen moet bijwerken wanneer iemand hun voor- of tweede naam heeft gewijzigd (en drie kolommen als ze beide hebben gewijzigd).
Dit is een goede kandidaat voor een berekende kolom.
Voorbeeld 2 – Verander de kolom in een berekende kolom
Als u een kolom wilt wijzigen in een berekende kolom, moet u eerst de kolom verwijderen en vervolgens maken met de nieuwe definitie.
Zo wijzigt u de FullName
kolom naar een berekende kolom.
ALTER TABLE Person DROP COLUMN FullName; ALTER TABLE Person ADD FullName AS (CONCAT(FirstName, ' ', LastName));
We hebben zojuist de kolom met de naam FullName
"gewijzigd". naar een berekende kolom. Het voegt de FirstName
. samen en LastName
kolommen.
Dit is wat er gebeurt als we de inhoud van de tabel selecteren:
SELECT * FROM Person;
Resultaat:
+------------+-------------+------------+----------------+ | PersonID | FirstName | LastName | FullName | |------------+-------------+------------+----------------| | 1 | Homer | Seinfeld | Homer Seinfeld | | 2 | Bart | Costanza | Bart Costanza | | 3 | Marge | Kramer | Marge Kramer | +------------+-------------+------------+----------------+
Voorbeeld 3 – Een waarde bijwerken
Als nu een waarde wordt bijgewerkt in de FirstName
of LastName
kolommen, heeft dit invloed op de waarde die door de berekende kolom wordt geretourneerd. Het is niet nodig om het in twee kolommen bij te werken.
Voorbeeld:
UPDATE Person SET LastName = 'Bourne' WHERE PersonId = 3; SELECT * FROM Person;
Resultaat:
+------------+-------------+------------+----------------+ | PersonID | FirstName | LastName | FullName | |------------+-------------+------------+----------------| | 1 | Homer | Seinfeld | Homer Seinfeld | | 2 | Bart | Costanza | Bart Costanza | | 3 | Marge | Bourne | Marge Bourne | +------------+-------------+------------+----------------+