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

Skift en eksisterende kolonne til en beregnet kolonne i SQL Server (T-SQL-eksempel)

Denne artikel viser, hvordan man bruger T-SQL til at ændre en eksisterende kolonne til en beregnet kolonne i SQL Server.

En beregnet kolonne er en virtuel kolonne, der bruger et udtryk til at beregne dens værdi. Udtrykket vil typisk bruge data fra andre kolonner. En beregnet kolonne gemmes ikke fysisk i tabellen, medmindre den er markeret med PERSISTED .

Eksempel 1 – Opret en tabel UDEN en beregnet kolonne

Lad os først oprette en tabel uden en beregnet kolonne.

OPRET TABEL Person ( PersonID int IDENTITET (1,1) IKKE NULL, Fornavn varchar(70), Efternavn varchar(70), Fuldt Navn varchar(140) );INSERT INTO Person (Fornavn, Efternavn, Fuldt Navn)VÆRDI (' Homer', 'Seinfeld', 'Homer Seinfeld'), ('Bart', 'Costanza', 'Bart Costanza'), ('Marge', 'Kramer', 'Marge Kramer'); VÆLG *FRA Person; 

Resultat:

+------------+-------------------+------ ----------+| PersonID | Fornavn | Efternavn | Fuldt navn ||------------+-------------+------------+------- ----------|| 1 | Homer | Seinfeld | Homer Seinfeld || 2 | Bart | Costanza | Bart Costanza || 3 | Marge | Kramer | Marge Kramer |+------------+------------------------- ----------+

Du kan se, at jeg fordobler, når jeg indsætter data. Det fulde navn er en kombination af fornavn og efternavn, og jeg genindtaster disse data for hver række.

Dette kan også forårsage problemer ved opdatering af tabellen. Jeg skal huske at opdatere to kolonner, hver gang nogen ændrede deres for- eller efternavn (og tre kolonner, hvis de ændrede begge).

Dette er en god kandidat til en beregnet kolonne.

Eksempel 2 – Skift kolonnen til en beregnet kolonne

For at ændre en kolonne til en beregnet kolonne, skal du først slippe kolonnen og derefter oprette den med den nye definition.

Sådan ændrer du FullName kolonne til en beregnet kolonne.

ALTER TABLE Person DROP COLUMN Fulde Navn;ALTER TABLE Person ADD FullName AS (CONCAT(Fornavn, ' ', Efternavn));

Vi har lige "ændret" kolonnen kaldet FullName til en beregnet kolonne. Det sammenkæder FirstName og LastName kolonner.

Her er, hvad der sker, når vi vælger tabellens indhold:

VÆLG *FRA person;

Resultat:

+------------+-------------------+------ ----------+| PersonID | Fornavn | Efternavn | Fuldt navn ||------------+-------------+------------+------- ----------|| 1 | Homer | Seinfeld | Homer Seinfeld || 2 | Bart | Costanza | Bart Costanza || 3 | Marge | Kramer | Marge Kramer |+------------+------------------------- ----------+

Eksempel 3 – Opdater en værdi

Nu, hvis en værdi er opdateret i FirstName eller LastName kolonner, vil dette påvirke den værdi, der returneres af den beregnede kolonne. Det er ikke nødvendigt at opdatere den i to kolonner.

Eksempel:

OPDATERING PersonSET LastName ='Bourne'WHERE PersonId =3;VÆLG *FRA Person;

Resultat:

+------------+-------------------+------ ----------+| PersonID | Fornavn | Efternavn | Fuldt navn ||------------+-------------+------------+------- ----------|| 1 | Homer | Seinfeld | Homer Seinfeld || 2 | Bart | Costanza | Bart Costanza || 3 | Marge | Bourne | Marge Bourne |+------------+------------------------- ----------+

  1. Mineplaner:Ikke kun for planens cache

  2. Er mysql_real_escape_string() og mysql_escape_string() tilstrækkelige til appsikkerhed?

  3. Kan ikke oprette forbindelse til MySQL fra Java:NullPointerException inde i MySQL-driverforbindelseslogikken

  4. Sådan komprimeres og repareres en database automatisk i Access 2016