Specificare le colonne calcolate in una tabella

Si applica a:SQL ServerDatabase SQL di AzureIstanza gestita di SQL di Azure

Una colonna calcolata è una colonna virtuale che non viene archiviata fisicamente nella tabella, a meno che non sia contrassegnata come PERSISTED. In un'espressione di colonna calcolata possono essere utilizzati dati di altre colonne per calcolare un valore per la colonna di appartenenza. È possibile specificare un'espressione per una colonna calcolata in SQL Server usando SQL Server Management Studio (SSMS) o Transact-SQL (T-SQL).

Limitazioni e restrizioni

  • Una colonna calcolata non può essere utilizzata come definizione di vincolo DEFAULT o FOREIGN KEY o con la definizione di vincolo NOT NULL. È tuttavia possibile utilizzare una colonna calcolata come colonna chiave di un indice o come parte di un vincolo PRIMARY KEY o UNIQUE, a condizione che il valore della colonna calcolata sia definito da un'espressione deterministica e il tipo di dati del risultato sia supportato nelle colonne dell'indice. Se, ad esempio, la tabella contiene le colonne di tipo integer a e b, è possibile indicizzare la colonna calcolata a + b, ma non la colonna calcolata a+DATEPART(dd, GETDATE()), in quanto durante chiamate successive il valore potrebbe cambiare.
  • Non è possibile usare una colonna calcolata in un'istruzione INSERT o UPDATE.
  • È necessario che l'opzione SET QUOTED_IDENTIFIER sia impostata su ON durante la creazione o la modifica di indici in colonne calcolate o viste indicizzate. Per altre informazioni, vedere SET QUOTED_IDENTIFIER (Transact-SQL).

Autorizzazioni

È necessario disporre dell'autorizzazione ALTER per la tabella.

Usare SQL Server Management Studio

Per aggiungere una nuova colonna calcolata

  1. In Esplora oggettiespandere la tabella per cui si desidera aggiungere la nuova colonna calcolata. Fare clic con il pulsante destro del mouse su Colonne e scegliere Nuova colonna.

  2. Immettere il nome della colonna e accettare il tipo di dati predefinito,nchar(10). Il motore di database determina il tipo di dati della colonna calcolata applicando le regole sulla precedenza dei tipi di dati alle espressioni specificate nella formula. Ad esempio, se la formula fa riferimento a una colonna di tipo money e una colonna di tipo int, la colonna calcolata sarà di tipo money perché tale tipo di dati ha precedenza maggiore. Per altre informazioni, vedere Precedenza dei tipi di dati (Transact-SQL).

  3. Nella scheda Proprietà colonne espandere la proprietà Specifica della colonna calcolata .

  4. Nella proprietà figlio (Formula) immettere l'espressione per la colonna nella cella della griglia a destra. Ad esempio, in una colonna SalesTotal , la formula immessa potrebbe essere SubTotal+TaxAmt+Freight, che aggiunge il valore in queste colonne per ogni riga della tabella.

    Importante

    Quando una formula combina due espressioni di tipi di dati diversi, le regole per la precedenza dei tipi di dati specificano che i tipi con precedenza inferiore vengano convertiti nei tipi con precedenza superiore. Se la conversione non è una conversione implicita supportata, viene restituito l'errore Error validating the formula for column column_name.. Utilizzare la funzione CAST o CONVERT per risolvere il conflitto del tipo di dati. Ad esempio, se una colonna di tipo nvarchar viene combinata con una colonna di tipo int, il tipo integer deve essere convertito in nvarchar come mostrato in questa formula ('Prod'+CONVERT(nvarchar(23),ProductID)). Per altre informazioni, vedere CAST e CONVERT (Transact-SQL).

  5. Indicare se i dati sono persistenti selezionando oppure No nell'elenco a discesa della proprietà figlio Persistente .

  6. Nel menu File selezionare Salvanome tabella.

Per aggiungere una definizione di colonna calcolata a una colonna esistente

  1. In Esplora oggettifare clic con il pulsante destro del mouse sulla tabella con la colonna per cui si vuole modificare ed espandere la cartella Colonne .
  2. Fare clic con il pulsante destro del mouse sulla colonna per cui specificare una formula di colonna calcolata e scegliere Elimina. Seleziona OK.
  3. Aggiungere una nuova colonna e specificare la formula della colonna calcolata attenendosi alla procedura precedente per aggiungere una nuova colonna calcolata.

Usare Transact-SQL

Per aggiungere una colonna calcolata quando si crea una tabella

Nell'esempio seguente viene creata una tabella con una colonna calcolata che moltiplica il valore della colonna QtyAvailable per il valore della colonna UnitPrice.

CREATE TABLE dbo.Products
   (
      ProductID int IDENTITY (1,1) NOT NULL
      , QtyAvailable smallint
      , UnitPrice money
      , InventoryValue AS QtyAvailable * UnitPrice
    );

-- Insert values into the table.
INSERT INTO dbo.Products (QtyAvailable, UnitPrice)
   VALUES (25, 2.00), (10, 1.5);

-- Display the rows in the table.
SELECT ProductID, QtyAvailable, UnitPrice, InventoryValue
FROM dbo.Products;

-- Update values in the table.
UPDATE dbo.Products 
SET UnitPrice = 2.5
WHERE ProductID = 1;

-- Display the rows in the table, and the new values for UnitPrice and InventoryValue.
SELECT ProductID, QtyAvailable, UnitPrice, InventoryValue
FROM dbo.Products;

Per aggiungere una nuova colonna calcolata a una tabella esistente

Nell'esempio seguente viene aggiunta una nuova colonna alla tabella creata nell'esempio precedente.

ALTER TABLE dbo.Products ADD RetailValue AS (QtyAvailable * UnitPrice * 1.5);

Facoltativamente, aggiungere l'argomento PERSISTED per archiviare fisicamente i valori calcolati nella tabella:

ALTER TABLE dbo.Products ADD RetailValue AS (QtyAvailable * UnitPrice * 1.5) PERSISTED;

Per impostare una colonna esistente su una colonna calcolata

Nell'esempio seguente viene modificata la colonna aggiunta nell'esempio precedente.

ALTER TABLE dbo.Products DROP COLUMN RetailValue;
GO

ALTER TABLE dbo.Products ADD RetailValue AS (QtyAvailable * UnitPrice * 1.5);
GO

Passaggi successivi