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

Opret en beregnet kolonne i SQL Server ved hjælp af T-SQL

Denne artikel viser, hvordan man bruger T-SQL til at oprette 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 med en beregnet kolonne

Her er et eksempel på at oprette en tabel med en beregnet kolonne, indsætte data og derefter vælge tabellens indhold.

CREATE TABLE Products
  (
    ProductID int IDENTITY (1,1) NOT NULL,
    ProductName varchar(255), 
    Quantity smallint,
    Price money,
    TotalValue AS Quantity * Price
  );

INSERT INTO Products (ProductName, Quantity, Price)
VALUES 
  ('Hammer', 5, 10),
  ('Corkscrew', 2, 7.50),
  ('Kettle', 3, 25.15);

SELECT *
FROM Products;

Resultat:

+-------------+---------------+------------+---------+--------------+
| ProductID   | ProductName   | Quantity   | Price   | TotalValue   |
|-------------+---------------+------------+---------+--------------|
| 1           | Hammer        | 5          | 10.0000 | 50.0000      |
| 2           | Corkscrew     | 2          | 7.5000  | 15.0000      |
| 3           | Kettle        | 3          | 25.1500 | 75.4500      |
+-------------+---------------+------------+---------+--------------+

I dette tilfælde er den sidste kolonne en beregnet kolonne. Den multiplicerer mængdekolonnen med priskolonnen. Dette gør det muligt for os at få en samlet værdi af det produkt, der i øjeblikket er på lager.

Eksempel 2 – Opret en vedvarende beregnet kolonne

Du kan oprette en vedvarende beregnet kolonne ved at tilføje PERSISTED argument. Dette vil resultere i, at den beregnede værdi gemmes fysisk i tabellen. Hvis den ikke fortsætter, beregnes værdien, hver gang du læser den beregnede kolonne.

Her er det samme kodeeksempel som det forrige, bortset fra at denne gang opretter jeg en vedvarende beregnet kolonne:

CREATE TABLE Products
  (
    ProductID int IDENTITY (1,1) NOT NULL,
    ProductName varchar(255), 
    Quantity smallint,
    Price money,
    TotalValue AS Quantity * Price PERSISTED
  );

Den eneste forskel er PERSISTED argument.

Eksempel 3 – Opdater en værdi

Hvis nu en værdi er opdateret i Quantity eller Price kolonner, vil dette påvirke den samlede værdi, der returneres af den beregnede kolonne. Dette vil ske, uanset om kolonnen er vedvarende eller ej.

Hvis nogen f.eks. køber en hammer, vil dette påvirke den samlede værdi, der returneres af den beregnede kolonne:

UPDATE Products
SET Quantity = 4
WHERE ProductId = 1;

SELECT *
FROM Products;

Resultat:

+-------------+---------------+------------+---------+--------------+
| ProductID   | ProductName   | Quantity   | Price   | TotalValue   |
|-------------+---------------+------------+---------+--------------|
| 1           | Hammer        | 4          | 10.0000 | 40.0000      |
| 2           | Corkscrew     | 2          | 7.5000  | 15.0000      |
| 3           | Kettle        | 3          | 25.1500 | 75.4500      |
+-------------+---------------+------------+---------+--------------+


  1. Hvordan opdaterer man valgte rækker med værdier fra en CSV-fil i Postgres?

  2. SSRS 2014 rapport implementeringsproblem

  3. Hvordan gør man, at en udvidelse ikke kan flyttes?

  4. Kompilering af PL/Proxy med PostgresPlus Advance Server 9.1