sql >> Database teknologi >  >> RDS >> Sqlserver

Hvad er en beregnet kolonne i SQL Server?

I SQL Server, en beregnet kolonne er en virtuel kolonne, der bruger et udtryk til at beregne dens værdi.

En beregnet kolonne vil typisk bruge data fra andre kolonner i sin beregning. Hvis data i nogen af ​​disse kolonner opdateres, vil den beregnede kolonne automatisk afspejle opdateringen i sin beregning.

Eksempel på en beregnet kolonne

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

I dette eksempel er FullName kolonne er en beregnet kolonne. Det sammenkæder værdierne fra FirstName og LastName kolonner for at beregne det fulde navn.

Uden den beregnede kolonne, hvis du vil vælge det fulde navn, skal du gøre noget som dette:

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

Eller du kan bruge CONCAT() funktion, som denne:

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

Hver gang du ville vælge et fulde navn fra tabellen, skulle du inkludere sammenkædningen i din forespørgsel.

Men ved at bruge en beregnet kolonne som den ovenfor, kan du gøre dette:

SELECT FullName
FROM Person;

Fordele ved beregnede kolonner

Beregnede kolonner kan spare tid, når du skriver forespørgsler, reducere fejl og endda forbedre ydeevnen.

Beregnede kolonner kan være praktiske, hvis du oplever, at du gentagne gange kører den samme forespørgsel igen og igen, især hvis forespørgslen er baseret på forretningsregler, der sjældent ændres.

Den beregnede kolonne i det foregående eksempel kunne spare os for en masse tid i fremtiden, fordi vi ikke behøver at sammenkæde fornavn og efternavn, hver gang vi vil vælge en persons fulde navn.

Eksempler på brugssager

Eksempler på, hvor en beregnet kolonne kan være nyttig omfatter:

  • Beregning af en persons alder baseret på deres fødselsdato i en anden kolonne
  • Sammenkædning af fornavn og efternavn, baseret på at fornavn er i én kolonne og efternavn i en anden
  • Beregning af et produkts lagerværdi baseret på antallet af produkter på lager i én kolonne og prisen i en anden
  • Beregn en persons BMI (Body Mass Index) baseret på deres højde og vægt i en anden kolonne
  • Oprettelse af en "Rank"-kolonne, der rangerer rækkerne baseret på værdier i andre kolonner
  • Beregning af løbstiderne for maratonløbere baseret på deres start- og sluttidspunkt i andre kolonner

Vedholdenhed af beregnede kolonner

En beregnet kolonne gemmes ikke fysisk i tabellen, medmindre den er markeret med PERSISTED .

Hvis det ikke er en vedvarende beregnet kolonne, vil beregningen finde sted, hver gang der tilgås tabellen.

Hvis det er en vedvarende beregnet kolonne, gemmes den beregnede værdi fysisk i tabellen. Det betyder, at det ikke behøver at beregne sin værdi, hver gang du kører en forespørgsel. Hvis data opdateres i en af ​​de kolonner, som de udleder sin værdi for, opdateres den beregnede kolonnes værdi og gemmes i tabellen. Dette kan hjælpe med ydeevnen.

Vær opmærksom på, at en beregnet kolonne kun kan bevares, hvis den er deterministisk. Hvis det er ikke-deterministisk, får du en fejl, hvis du prøver at fortsætte det.

En ikke-deterministisk kolonne er en, der returnerer forskellige værdier, selv med det samme input. For eksempel, hvis du bruger den aktuelle dato i din beregning, vil værdien være forskellig hver dag, og den vil blive betragtet som ikke-deterministisk.

Hvis du blot sammenkæder fornavn og efternavn, så ville det være deterministisk, og du kunne fortsætte med en sådan kolonne.

Oprettelse af en beregnet kolonne

Du kan oprette beregnede kolonner fra SSMS GUI eller med Transact-SQL.

I SSMS

I SSMS, mens du er i Table Designer , opret den kolonne, du ønsker skal være den beregnede kolonne (eller vælg den, hvis den allerede findes), og derefter under Kolonneegenskaber fanen, skal du indtaste din formel i Beregnet kolonnespecifikation ejendomsfelt.

Du skal ikke bekymre dig om at give den beregnede kolonne en datatype – SQL Server vil give den en datatype baseret på din formel.

Du kan også vælge Ja for Er vedvarende hvis du ønsker.

Brug af T-SQL

Se Opret en beregnet kolonne i SQL Server ved hjælp af T-SQL for et eksempel på oprettelse af en beregnet kolonne ved hjælp af Transact-SQL.


  1. Antal unikke værdier

  2. Henter UTF-8 tekst fra MySQL i R returnerer ????

  3. Sådan fjerner du efterfølgende hvidt mellemrum i MySQL

  4. AVG() – Beregn den gennemsnitlige værdi af en kolonne i MySQL