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

Creare una colonna calcolata in SQL Server utilizzando T-SQL

Questo articolo illustra come utilizzare T-SQL per creare una colonna calcolata in SQL Server.

Una colonna calcolata è una colonna virtuale che usa un'espressione per calcolarne il valore. L'espressione utilizzerà in genere i dati di altre colonne. Una colonna calcolata non viene archiviata fisicamente nella tabella a meno che non sia contrassegnata con PERSISTED .

Esempio 1:creare una tabella con una colonna calcolata

Ecco un esempio di creazione di una tabella con una colonna calcolata, inserimento di dati, quindi selezione del contenuto della tabella.

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;

Risultato:

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

In questo caso, l'ultima colonna è una colonna calcolata. Moltiplica la colonna della quantità per la colonna del prezzo. Questo ci consente di ottenere un valore totale del prodotto attualmente in stock.

Esempio 2:creare una colonna calcolata persistente

Puoi creare una colonna calcolata persistente aggiungendo il PERSISTED discussione. Ciò comporterà la memorizzazione fisica del valore calcolato nella tabella. Se non è persistente, il valore viene calcolato ogni volta che leggi la colonna calcolata.

Ecco lo stesso esempio di codice del precedente, tranne per il fatto che questa volta creo una colonna calcolata persistente:

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

L'unica differenza è il PERSISTED argomento.

Esempio 3:aggiornamento di un valore

Ora se un valore viene aggiornato nella Quantity o Price colonne, ciò influirà sul valore totale restituito dalla colonna calcolata. Ciò si verificherà indipendentemente dal fatto che la colonna sia persistente o meno.

Ad esempio, se qualcuno acquista un martello, ciò influirà sul valore totale restituito dalla colonna calcolata:

UPDATE Products
SET Quantity = 4
WHERE ProductId = 1;

SELECT *
FROM Products;

Risultato:

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