sql >> Databasteknik >  >> RDS >> Sqlserver

Skapa en beräknad kolumn i SQL Server med T-SQL

Den här artikeln visar hur man använder T-SQL för att skapa en beräknad kolumn i SQL Server.

En beräknad kolumn är en virtuell kolumn som använder ett uttryck för att beräkna dess värde. Uttrycket kommer vanligtvis att använda data från andra kolumner. En beräknad kolumn lagras inte fysiskt i tabellen om den inte är markerad med PERSISTED .

Exempel 1 – Skapa en tabell med en beräknad kolumn

Här är ett exempel på att skapa en tabell med en beräknad kolumn, infoga data och sedan välja tabellens innehåll.

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 det här fallet är den sista kolumnen en beräknad kolumn. Den multiplicerar kvantitetskolumnen med priskolumnen. Detta gör det möjligt för oss att få ett totalt värde av den produkt som för närvarande finns i lager.

Exempel 2 – Skapa en beständig beräknad kolumn

Du kan skapa en beständig beräknad kolumn genom att lägga till PERSISTED argument. Detta kommer att resultera i att det beräknade värdet lagras fysiskt i tabellen. Om det inte kvarstår, beräknas värdet varje gång du läser den beräknade kolumnen.

Här är samma kodexempel som det föregående, förutom den här gången skapar jag en beständig beräknad kolumn:

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

Den enda skillnaden är PERSISTED argument.

Exempel 3 – Uppdatera ett värde

Nu om ett värde uppdateras i Quantity eller Price kolumner, kommer detta att påverka det totala värdet som returneras av den beräknade kolumnen. Detta inträffar oavsett om kolumnen kvarstår eller inte.

Om någon köper en hammare till exempel, kommer detta att påverka det totala värdet som returneras av den beräknade kolumnen:

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. flytta data från en tabell till en annan, postgresql edition

  2. Effektiva ISNUMERIC()-ersättningar på SQL Server?

  3. Oracle-tabellen eller -vyn existerar inte inifrån den lagrade proceduren

  4. SQLT i 12c kan inte samla in statistik