In SQL Server, una colonna calcolata è una colonna virtuale che usa un'espressione per calcolarne il valore.
Una colonna calcolata utilizzerà in genere i dati di altre colonne nel suo calcolo. Se i dati in una di queste colonne vengono aggiornati, la colonna calcolata rifletterà automaticamente l'aggiornamento nel suo calcolo.
Esempio di colonna calcolata
+------------+-------------+------------+----------------+ | PersonID | FirstName | LastName | FullName | |------------+-------------+------------+----------------| | 1 | Homer | Seinfeld | Homer Seinfeld | | 2 | Bart | Costanza | Bart Costanza | | 3 | Marge | Kramer | Marge Kramer | +------------+-------------+------------+----------------+
In questo esempio, il FullName
colonna è una colonna calcolata. Concatena i valori da FirstName
e LastName
colonne per calcolare il nome completo.
Senza la colonna calcolata, se volessi selezionare il nome completo, dovresti fare qualcosa del genere:
SELECT FirstName + ' ' + LastName AS FullName FROM Person;
Oppure potresti usare il CONCAT()
funzione, in questo modo:
SELECT CONCAT(FirstName, ' ', LastName) AS FullName FROM Person;
Ogni volta che si desidera selezionare un nome completo dalla tabella, è necessario includere la concatenazione nella query.
Ma usando una colonna calcolata come quella sopra, potresti farlo:
SELECT FullName FROM Person;
Vantaggi delle colonne calcolate
Le colonne calcolate possono far risparmiare tempo durante la scrittura di query, ridurre gli errori e persino migliorare le prestazioni.
Le colonne calcolate possono essere utili se ti ritrovi a eseguire ripetutamente la stessa query più e più volte, soprattutto se tale query si basa su regole aziendali che cambiano raramente.
La colonna calcolata nell'esempio precedente potrebbe farci risparmiare un sacco di tempo in futuro, perché non avremo bisogno di concatenare il nome e il cognome ogni volta che vogliamo selezionare il nome completo di qualcuno.
Esempi di casi d'uso
Esempi di dove una colonna calcolata potrebbe essere utile includono:
- Calcolo dell'età di una persona, in base alla data di nascita in un'altra colonna
- Concatenazione di nome e cognome, in base al nome in una colonna e cognome in un'altra
- Calcolo del valore dell'inventario di un prodotto, in base al numero di prodotti in stock in una colonna e al prezzo in un'altra
- Calcola l'IMC (indice di massa corporea) di una persona in base alla sua altezza e al suo peso in un'altra colonna
- Creazione di una colonna "Classifica" che classifica le righe, in base ai valori in altre colonne
- Calcolo dei tempi di gara dei maratoneti, in base all'ora di inizio e all'ora di fine in altre colonne
Persistenza delle colonne calcolate
Una colonna calcolata non viene archiviata fisicamente nella tabella a meno che non sia contrassegnata come PERSISTED
.
Se lo è non una colonna calcolata persistente, il calcolo avverrà ogni volta che si accede alla tabella.
Se lo è una colonna calcolata persistente, il valore calcolato viene archiviato fisicamente nella tabella. Ciò significa che non è necessario calcolare il suo valore ogni volta che esegui una query. Se i dati vengono aggiornati in una delle colonne per cui ne deriva il valore, il valore della colonna calcolata viene aggiornato e archiviato nella tabella. Questo può aiutare con le prestazioni.
Tieni presente che una colonna calcolata può essere mantenuta solo se è deterministica. Se non è deterministico, riceverai un errore se provi a persistere.
Un non deterministico colonna è quella che restituisce valori diversi anche con lo stesso input. Ad esempio, se si utilizza la data corrente nel calcolo, il valore sarà diverso ogni giorno e sarà considerato non deterministico.
Se stai semplicemente concatenando il nome e il cognome, sarebbe deterministico e potresti rendere persistente tale colonna.
Creazione di una colonna calcolata
È possibile creare colonne calcolate dalla GUI di SSMS o con Transact-SQL.
Negli SSMS
In SSMS, mentre in Table Designer , crea la colonna che vuoi che sia la colonna calcolata (o selezionala semplicemente se esiste già), quindi in Proprietà colonna scheda, inserisci la tua formula nella Specifica della colonna calcolata campo di proprietà.
Non preoccuparti di assegnare alla colonna calcolata un tipo di dati:SQL Server le assegnerà un tipo di dati in base alla tua formula.
Puoi anche selezionare Sì per è persistente se desideri.
Utilizzo di T-SQL
Vedere Creare una colonna calcolata in SQL Server utilizzando T-SQL per un esempio di creazione di una colonna calcolata utilizzando Transact-SQL.