Condividi tramite


Specificare le colonne calcolate in una tabella

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 2012 utilizzando SQL Server Management Studio o Transact-SQL.

Contenuto dell'argomento

  • Prima di iniziare:

    Limitazioni e restrizioni

    Sicurezza

  • Per specificare una colonna calcolata:

    SQL Server Management Studio

    Transact-SQL

Prima di iniziare

Limitazioni e restrizioni

  • Una colonna calcolata non può essere utilizzata come definizione di vincolo DEFAULT o FOREIGN KEY o con una 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 è consentito l'utilizzo di una colonna calcolata come destinazione di un'istruzione INSERT o UPDATE.

Sicurezza

Autorizzazioni

È necessario disporre dell'autorizzazione ALTER per la tabella.

Icona freccia utilizzata con il collegamento Torna all'inizio[Torna all'inizio]

Utilizzo di SQL Server Management Studio

Per aggiungere una nuova colonna calcolata

  1. In Esplora oggetti espandere 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 ulteriori 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 sulla 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.

    Nota importanteImportante

    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 ulteriori informazioni, vedere CAST e CONVERT (Transact-SQL).

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

  6. Scegliere Salva dal menu File table name.

Icona freccia utilizzata con il collegamento Torna all'inizio[Torna all'inizio]

Per aggiungere una definizione di colonna calcolata a una colonna esistente

  1. In Esplora oggetti fare clic con il pulsante destro del mouse sulla tabella con la colonna di cui si desidera modificare ed espandere la cartella Colonne.

  2. Fare clic con il pulsante destro del mouse sulla colonna per cui si desidera specificare una formula di colonna calcolata e fare clic su Elimina. Fare clic su OK.

  3. Aggiungere una nuova colonna e specificare la formula della colonna calcolata attenendosi alla procedura precedente per aggiungere una nuova colonna calcolata.

Icona freccia utilizzata con il collegamento Torna all'inizio[Torna all'inizio]

Utilizzo di Transact-SQL

Per aggiungere una colonna calcolata quando si crea una tabella

  1. Connettersi al Motore di database.

  2. Dalla barra Standard fare clic su Nuova query.

  3. Copiare e incollare l'esempio seguente nella finestra Query, quindi fare clic su Esegui. Nell'esempio 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;
    

Per aggiungere una nuova colonna calcolata a una tabella esistente

  1. Connettersi al Motore di database.

  2. Dalla barra Standard fare clic su Nuova query.

  3. Copiare e incollare l'esempio seguente nella finestra Query, quindi fare clic su Esegui. Nell'esempio seguente viene aggiunta una nuova colonna alla tabella creata nell'esempio precedente.

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

Per impostare una colonna esistente su una colonna calcolata

  1. Connettersi al Motore di database.

  2. Dalla barra Standard fare clic su Nuova query.

  3. Per modificare una colonna esistente in una colonna calcolata, rilasciare e ricreare la colonna calcolata. Copiare e incollare l'esempio seguente nella finestra Query, quindi fare clic su Esegui. 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);
    

    Per ulteriori informazioni, vedere ALTER TABLE (Transact-SQL).

Icona freccia utilizzata con il collegamento Torna all'inizio[Torna all'inizio]