sql >> Databasteknik >  >> RDS >> Sqlserver

Vad är en beräknad kolumn i SQL Server?

I SQL Server, en beräknad kolumn är en virtuell kolumn som använder ett uttryck för att beräkna dess värde.

En beräknad kolumn använder vanligtvis data från andra kolumner i sin beräkning. Om data i någon av dessa kolumner uppdateras kommer den beräknade kolumnen automatiskt att återspegla uppdateringen i sin beräkning.

Exempel på en beräknad kolumn

+------------+-------------+------------+----------------+
| PersonID   | FirstName   | LastName   | FullName       |
|------------+-------------+------------+----------------|
| 1          | Homer       | Seinfeld   | Homer Seinfeld |
| 2          | Bart        | Costanza   | Bart Costanza  |
| 3          | Marge       | Kramer     | Marge Kramer   |
+------------+-------------+------------+----------------+

I det här exemplet visas FullName kolumn är en beräknad kolumn. Det sammanfogar värdena från FirstName och LastName kolumner för att beräkna det fullständiga namnet.

Utan den beräknade kolumnen, om du vill välja det fullständiga namnet, måste du göra något så här:

SELECT FirstName + ' ' + LastName AS FullName
FROM Person;

Eller så kan du använda CONCAT() funktion, så här:

SELECT CONCAT(FirstName, ' ', LastName) AS FullName
FROM Person;

Varje gång du vill välja ett fullständigt namn från tabellen måste du inkludera sammanlänkningen i din fråga.

Men genom att använda en beräknad kolumn som den ovan, kan du göra detta:

SELECT FullName
FROM Person;

Fördelar med beräknade kolumner

Beräknade kolumner kan spara tid när du skriver frågor, minska antalet fel och till och med förbättra prestanda.

Beräknade kolumner kan vara praktiskt om du kommer på att du upprepade gånger kör samma fråga om och om igen, särskilt om den frågan är baserad på affärsregler som sällan ändras.

Den beräknade kolumnen i föregående exempel skulle kunna spara mycket tid i framtiden, eftersom vi inte behöver sammanfoga förnamn och efternamn varje gång vi vill välja någons fullständiga namn.

Exempel på användningsfall

Exempel på var en beräknad kolumn kan vara användbar inkluderar:

  • Beräkna en persons ålder baserat på deras födelsedatum i en annan kolumn
  • Sammanfoga förnamn och efternamn, baserat på att förnamn finns i en kolumn och efternamn i en annan
  • Beräkna en produkts lagervärde baserat på antalet produkter i lager i en kolumn och priset i en annan
  • Beräkna en persons BMI (Body Mass Index), baserat på deras längd och vikt i en annan kolumn
  • Skapa en "Rank"-kolumn som rangordnar raderna baserat på värden i andra kolumner
  • Beräkna lopptiderna för maratonlöpare, baserat på deras starttid och sluttid i andra kolumner

Beständighet för beräknade kolumner

En beräknad kolumn lagras inte fysiskt i tabellen om den inte är markerad med PERSISTED .

Om det inte är det en beständig beräknad kolumn, kommer beräkningen att ske varje gång tabellen öppnas.

Om det är en beständig beräknad kolumn, det beräknade värdet lagras fysiskt i tabellen. Det betyder att det inte behöver beräkna sitt värde varje gång du kör en fråga. Om data uppdateras i en av kolumnerna för vilka den härleder sitt värde, uppdateras den beräknade kolumnens värde och lagras i tabellen. Detta kan hjälpa till med prestanda.

Tänk på att en beräknad kolumn endast kan bestå om den är deterministisk. Om det är icke-deterministiskt får du ett felmeddelande om du försöker fortsätta med det.

En icke-deterministisk kolumn är en som returnerar olika värden även med samma indata. Till exempel, om du använder det aktuella datumet i din beräkning, kommer värdet att vara olika varje dag, och det kommer att betraktas som icke-deterministiskt.

Om du bara sammanfogar förnamn och efternamn, så skulle det vara deterministiskt, och du kan fortsätta med en sådan kolumn.

Skapa en beräknad kolumn

Du kan skapa beräknade kolumner från SSMS GUI eller med Transact-SQL.

I SSMS

I SSMS, medan i Table Designer , skapa kolumnen som du vill ska vara den beräknade kolumnen (eller helt enkelt välj den om den redan finns), sedan under Kolumnegenskaper anger du din formel i Computed Column Specification fastighetsfält.

Oroa dig inte för att ge den beräknade kolumnen en datatyp – SQL Server kommer att ge den en datatyp baserad på din formel.

Du kan också välja Ja för Består om du vill.

Använder T-SQL

Se Skapa en beräknad kolumn i SQL Server med T-SQL för ett exempel på hur du skapar en beräknad kolumn med Transact-SQL.


  1. Pivotering av data med två kolumner

  2. PostgreSQL:Visa tabeller i PostgreSQL

  3. Skillnaden i månader mellan datum i MySQL

  4. Beräkna antalet samtidiga händelser i SQL