sql >> Databáze >  >> RDS >> Sqlserver

Vytvořte Computed Column v SQL Server pomocí T-SQL

Tento článek ukazuje, jak použít T-SQL k vytvoření vypočítaného sloupce na serveru SQL.

Vypočítaný sloupec je virtuální sloupec, který používá výraz k výpočtu své hodnoty. Výraz bude obvykle používat data z jiných sloupců. Vypočítaný sloupec není v tabulce fyzicky uložen, pokud není označen PERSISTED .

Příklad 1 – Vytvoření tabulky s vypočítaným sloupcem

Zde je příklad vytvoření tabulky s vypočítaným sloupcem, vložení dat a následný výběr obsahu tabulky.

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;

Výsledek:

+-------------+---------------+------------+---------+--------------+
| 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      |
+-------------+---------------+------------+---------+--------------+

V tomto případě je posledním sloupcem vypočítaný sloupec. Vynásobí sloupec množství sloupcem ceny. To nám umožňuje získat celkovou hodnotu produktu, který je aktuálně skladem.

Příklad 2 – Vytvoření trvalého vypočítaného sloupce

Můžete vytvořit trvalý vypočítaný sloupec přidáním PERSISTED argument. To bude mít za následek, že vypočítaná hodnota bude fyzicky uložena v tabulce. Pokud není trvalá, pak se hodnota vypočítá pokaždé, když čtete vypočítaný sloupec.

Zde je stejný příklad kódu jako předchozí, ale tentokrát vytvořím trvalý vypočítaný sloupec:

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

Jediný rozdíl je PERSISTED argument.

Příklad 3 – Aktualizace hodnoty

Nyní, pokud je hodnota aktualizována v Quantity nebo Price sloupců, ovlivní to celkovou hodnotu vrácenou vypočítaným sloupcem. K tomu dojde bez ohledu na to, zda je sloupec trvalý nebo ne.

Pokud si někdo koupí například kladivo, ovlivní to celkovou hodnotu vrácenou vypočteným sloupcem:

UPDATE Products
SET Quantity = 4
WHERE ProductId = 1;

SELECT *
FROM Products;

Výsledek:

+-------------+---------------+------------+---------+--------------+
| 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. Může operátor IN používat LIKE-wildcards (%) v Oracle?

  2. Kolekce Oracle PL/SQL – Vytvořte vnořenou tabulku v databázi

  3. Cloud Vendor Deep-Dive:PostgreSQL na DigitalOcean

  4. Časový limit dotazu vyprší při spuštění z webu, ale superrychlý při spuštění z SSMS